hqchart 1.1.12429 → 1.1.12433
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/umychart.vue.js +11 -9
- package/package.json +1 -1
- package/src/jscommon/umychart.complier.js +37 -11
- package/src/jscommon/umychart.js +8 -4
- package/src/jscommon/umychart.uniapp.h5/umychart.uniapp.h5.js +46 -16
- package/src/jscommon/umychart.version.js +1 -1
- package/src/jscommon/umychart.vue/umychart.vue.js +46 -16
package/lib/umychart.vue.js
CHANGED
|
@@ -2070,7 +2070,7 @@ return fixValue;}function ToFixedRect(value){// With a bitwise or.
|
|
|
2070
2070
|
// Finally, a left bitwise shift.
|
|
2071
2071
|
//value*=GetDevicePixelRatio();
|
|
2072
2072
|
var rounded;return rounded=0.5+value<<0;}//深拷贝
|
|
2073
|
-
function CloneData(data){if(!data)return null;var strData=(0,_stringify2.default)(data);var item=JSON.parse(strData);return item;}function Point(){this.X;this.Y;}function SelectRectData(){this.Data;//主数据
|
|
2073
|
+
function CloneData(data){if(!data)return null;var strData=(0,_stringify2.default)(data);var item=JSON.parse(strData);return item;}function IsRecvOverlap(rect1,rect2){return Math.max(rect1.Left,rect2.Left)<Math.min(rect1.Right,rect2.Right)&&Math.max(rect1.Top,rect2.Top)<Math.min(rect1.Bottom,rect2.Bottom);}function Point(){this.X;this.Y;}function SelectRectData(){this.Data;//主数据
|
|
2074
2074
|
this.JSChartContainer;//行情控件
|
|
2075
2075
|
this.Start;//数据起始位子
|
|
2076
2076
|
this.End;//数据结束位置
|
|
@@ -4155,16 +4155,16 @@ this.EnableTooltip=true;this.TooltipRect=[];this.ExcludeArea=null;//排除区域
|
|
|
4155
4155
|
this.AutoPosition=null;//{ Direction:0, MaxYOffset:40 } //自动调整Y轴偏移,防止文字重叠
|
|
4156
4156
|
this.AryDrawRect=[];//已经绘制的区域
|
|
4157
4157
|
this.AutoYOffset=0;//this.Data; 存K线数据
|
|
4158
|
-
this.Draw=function(){this.TooltipRect=[];this.AryDrawRect=[];this.AutoYOffset=0;if(!this.IsShow||this.ChartFrame.IsMinSize||!this.IsVisible)return;if(this.IsShowIndexTitleOnly())return;if(this.IsHideScriptIndex())return;this.DrawSVG();};this.DrawDetail=function(rtSVG,data){if(!IFrameSplitOperator.IsNonEmptyArray(data.Content))return;var lefMargin=2;var rightMargin=2;var itemSpace=2;var rtBorder={Left:rtSVG.Right,Right:rtSVG.Right,Bottom:rtSVG.Bottom};var rightBorder=0;//右边的边界 0=div的宽度 1=图形框架边框
|
|
4158
|
+
this.Draw=function(){this.TooltipRect=[];this.AryDrawRect=[];this.AutoYOffset=0;if(!this.IsShow||this.ChartFrame.IsMinSize||!this.IsVisible)return;if(this.IsShowIndexTitleOnly())return;if(this.IsHideScriptIndex())return;this.DrawSVG();};this.DrawDetail=function(rtSVG,data,svgItem){if(!IFrameSplitOperator.IsNonEmptyArray(data.Content))return;var lefMargin=2;var rightMargin=2;var itemSpace=2;var rtBorder={Left:rtSVG.Right,Right:rtSVG.Right,Bottom:rtSVG.Bottom};var rightBorder=0;//右边的边界 0=div的宽度 1=图形框架边框
|
|
4159
4159
|
if(IFrameSplitOperator.IsNumber(data.ItemSpace))itemSpace=data.ItemSpace;if(IFrameSplitOperator.IsNumber(data.YOffset))rtBorder.Bottom+=data.YOffset;if(IFrameSplitOperator.IsNumber(data.XOffset))rtBorder.Left+=data.XOffset;if(IFrameSplitOperator.IsNumber(data.LeftMargin))lefMargin=data.LeftMargin;if(IFrameSplitOperator.IsNumber(data.RightMargin))rightMargin=data.RightMargin;if(IFrameSplitOperator.IsNumber(data.RightBorder))rightBorder=data.RightBorder;if(data.Font)this.Canvas.font=data.Font;else this.Canvas.font=this.TextFont;this.Canvas.textBaseline='bottom';this.Canvas.textAlign='left';var textHeight=this.Canvas.measureText("擎").width+2;rtBorder.Height=textHeight+5;var yText=rtBorder.Bottom-(rtBorder.Height-textHeight)/2;var xText=rtBorder.Left+lefMargin;var aryText=[];for(var i=0;i<data.Content.length;++i){if(aryText.length>0)xText+=itemSpace;var item=data.Content[i];if(!item.Text)continue;var textWidth=this.Canvas.measureText(item.Text).width+2;aryText.push({X:xText,Y:yText,Width:textWidth,Data:item});xText+=textWidth;rtBorder.Right=xText;}rtBorder.Right+=rightMargin;rtBorder.Width=rtBorder.Right-rtBorder.Left;rtBorder.Top=rtBorder.Bottom-rtBorder.Height;var right=this.ChartBorder.GetChartWidth()-1;if(rightBorder==1)right=this.ChartBorder.GetRight();if(rtBorder.Right>right)//右边显示不下,显示在左边
|
|
4160
|
-
{rtBorder.Right=rtSVG.Left;if(IFrameSplitOperator.IsNumber(data.XOffset))rtBorder.Right-=data.XOffset;rtBorder.Left=rtBorder.Right-rtBorder.Width;var xText=rtBorder.Left+lefMargin;for(var i=0;i<aryText.length;++i){if(i>0)xText+=itemSpace;var item=aryText[i];item.X=xText;xText+=item.Width;}}if(data.BGColor){this.Canvas.fillStyle=data.BGColor;this.Canvas.fillRect(rtBorder.Left,rtBorder.Top,rtBorder.Width,rtBorder.Height);}if(data.BorderColor){this.Canvas.strokeStyle=data.BorderColor;this.Canvas.strokeRect(ToFixedPoint(rtBorder.Left),ToFixedPoint(rtBorder.Top),ToFixedRect(rtBorder.Width),ToFixedRect(rtBorder.Height));}for(var i=0;i<aryText.length;++i){var item=aryText[i];this.Canvas.fillStyle=item.Data.Color;this.Canvas.fillText(item.Data.Text,item.X,item.Y);}this.AryDrawRect.push({Left:rtBorder.Left,Top:rtBorder.Top,Right:rtBorder.Right,Bottom:rtBorder.Bottom,Type:"Detail"});};this.GetDetailPosition=function(rtSVG,data){if(!IFrameSplitOperator.IsNonEmptyArray(data.Content))return null;var lefMargin=2;var rightMargin=2;var itemSpace=2;var rtBorder={Left:rtSVG.Right,Right:rtSVG.Right,Bottom:rtSVG.Bottom};var rightBorder=0;//右边的边界 0=div的宽度 1=图形框架边框
|
|
4160
|
+
{rtBorder.Right=rtSVG.Left;if(IFrameSplitOperator.IsNumber(data.XOffset))rtBorder.Right-=data.XOffset;rtBorder.Left=rtBorder.Right-rtBorder.Width;var xText=rtBorder.Left+lefMargin;for(var i=0;i<aryText.length;++i){if(i>0)xText+=itemSpace;var item=aryText[i];item.X=xText;xText+=item.Width;}}if(data.BGColor){this.Canvas.fillStyle=data.BGColor;this.Canvas.fillRect(rtBorder.Left,rtBorder.Top,rtBorder.Width,rtBorder.Height);}if(data.BorderColor){this.Canvas.strokeStyle=data.BorderColor;this.Canvas.strokeRect(ToFixedPoint(rtBorder.Left),ToFixedPoint(rtBorder.Top),ToFixedRect(rtBorder.Width),ToFixedRect(rtBorder.Height));}for(var i=0;i<aryText.length;++i){var item=aryText[i];this.Canvas.fillStyle=item.Data.Color;this.Canvas.fillText(item.Data.Text,item.X,item.Y);}this.AryDrawRect.push({Left:rtBorder.Left,Top:rtBorder.Top,Right:rtBorder.Right,Bottom:rtBorder.Bottom,Type:"Detail",Data:svgItem});};this.GetDetailPosition=function(rtSVG,data){if(!IFrameSplitOperator.IsNonEmptyArray(data.Content))return null;var lefMargin=2;var rightMargin=2;var itemSpace=2;var rtBorder={Left:rtSVG.Right,Right:rtSVG.Right,Bottom:rtSVG.Bottom};var rightBorder=0;//右边的边界 0=div的宽度 1=图形框架边框
|
|
4161
4161
|
if(IFrameSplitOperator.IsNumber(data.ItemSpace))itemSpace=data.ItemSpace;if(IFrameSplitOperator.IsNumber(data.YOffset))rtBorder.Bottom+=data.YOffset;if(IFrameSplitOperator.IsNumber(data.XOffset))rtBorder.Left+=data.XOffset;if(IFrameSplitOperator.IsNumber(data.LeftMargin))lefMargin=data.LeftMargin;if(IFrameSplitOperator.IsNumber(data.RightMargin))rightMargin=data.RightMargin;if(IFrameSplitOperator.IsNumber(data.RightBorder))rightBorder=data.RightBorder;if(data.Font)this.Canvas.font=data.Font;else this.Canvas.font=this.TextFont;var textHeight=this.Canvas.measureText("擎").width+2;rtBorder.Height=textHeight+5;var yText=rtBorder.Bottom-(rtBorder.Height-textHeight)/2;var xText=rtBorder.Left+lefMargin;var bFrist=true;for(var i=0;i<data.Content.length;++i){if(!bFrist)xText+=itemSpace;var item=data.Content[i];if(!item.Text)continue;var textWidth=this.Canvas.measureText(item.Text).width+2;xText+=textWidth;rtBorder.Right=xText;bFrist=false;}rtBorder.Right+=rightMargin;rtBorder.Width=rtBorder.Right-rtBorder.Left;rtBorder.Top=rtBorder.Bottom-rtBorder.Height;var right=this.ChartBorder.GetChartWidth()-1;if(rightBorder==1)right=this.ChartBorder.GetRight();if(rtBorder.Right>right)//右边显示不下,显示在左边
|
|
4162
4162
|
{rtBorder.Right=rtSVG.Left;if(IFrameSplitOperator.IsNumber(data.XOffset))rtBorder.Right-=data.XOffset;rtBorder.Left=rtBorder.Right-rtBorder.Width;}return rtBorder;};this.CalculateShowPosition=function(item,pt){var x=pt.X,y=pt.Y;var svgItem=item.SVG;if(IFrameSplitOperator.IsNumber(svgItem.YOffset))y+=svgItem.YOffset;var fontSVG=svgItem.Size+'px '+this.Family;this.Canvas.font=fontSVG;var halfSize=svgItem.Size/2;var rtSVG={Left:x-halfSize,Right:x+halfSize,Top:y-svgItem.Size,Bottom:y,Height:svgItem.Size,Width:svgItem.Size};if(svgItem.VAlign===0)//top
|
|
4163
4163
|
{rtSVG.Top=y;rtSVG.Bottom=rtSVG.Top+svgItem.Size;}else if(svgItem.VAlign===1)//middle
|
|
4164
4164
|
{rtSVG.Top=y-svgItem.Size/2;rtSVG.Bottom=rtSVG.Top+svgItem.Size;}if(rtSVG.Top<0){rtSVG.Top=0;rtSVG.Bottom=svgItem.Size;y=rtSVG.Bottom;}var rtContent=null;if(item.Detail)rtContent=this.GetDetailPosition(rtSVG,item.Detail);var yOffset=0,yMoveStep=-5;if(IFrameSplitOperator.IsNumber(this.AutoPosition.MoveYStep))yMoveStep=-Math.abs(this.AutoPosition.MoveYStep);for(var i=0;i<20;++i){if(rtSVG&&!rtContent){if(!this.IsRectOverlap(rtSVG))break;}else if(rtSVG&&rtContent){if(!this.IsRectOverlap(rtSVG)&&!this.IsRectOverlap(rtContent))break;}yOffset+=yMoveStep;if(Math.abs(yOffset)>=this.AutoPosition.MaxYOffset)break;rtSVG.Top+=yMoveStep;rtSVG.Bottom+=yMoveStep;if(rtContent){rtContent.Top+=yMoveStep;rtContent.Bottom+=yMoveStep;}}pt.X=x;pt.Y=y+yOffset;};this.IsRectOverlap=function(rect){for(var i=0;i<this.AryDrawRect.length;++i){var item=this.AryDrawRect[i];if((rect.Left>=item.Left&&rect.Left<=item.Right||rect.Right>=item.Left&&rect.Right<=item.Right)&&(rect.Top>=item.Top&&rect.Top<=item.Bottom||rect.Bottom>=item.Top&&rect.Bottom<=item.Bottom)){return true;}}return false;};this.DrawSVG=function(){if(!this.IsShow||this.ChartFrame.IsMinSize)return;if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return;if(!IFrameSplitOperator.IsNonEmptyArray(this.Texts))return;if(!this.Family)return;this.IsHScreen=this.ChartFrame.IsHScreen===true;var xPointCount=this.ChartFrame.XPointCount;var offset=this.Data.DataOffset;var top=this.ChartBorder.GetTopEx();var bottom=this.ChartBorder.GetBottomEx();var pixelRatio=GetDevicePixelRatio();var x=0,y=0;for(var i=0;i<this.Texts.length;++i){var item=this.Texts[i];if(!item.SVG||!item.SVG.Symbol)continue;if(!IFrameSplitOperator.IsNumber(item.Index))continue;var isMinuteFrame=this.IsMinuteFrame();var index=item.Index-offset;var kItem=this.Data.Data[item.Index];if(index<0||index>=xPointCount)continue;x=this.ChartFrame.GetXFromIndex(index);if(item.Value=="Top")y=top;else if(item.Value=="Bottom")y=bottom;else y=this.ChartFrame.GetYFromData(item.Value);if(IFrameSplitOperator.IsNumber(item.YOffset))y+=item.YOffset;//Y轴偏移
|
|
4165
4165
|
var svgItem=item.SVG;if(IFrameSplitOperator.IsNumber(svgItem.YOffset))y+=svgItem.YOffset;if(this.AutoPosition){var pt={X:x,Y:y};this.CalculateShowPosition(item,pt);//重新计算位置
|
|
4166
|
-
x=pt.X;y=pt.Y;}var fontSVG=svgItem.Size+'px '+this.Family;this.Canvas.font=fontSVG;var halfSize=svgItem.Size/2;var textBaseline='bottom';var rtSVG={Left:x-halfSize,Right:x+halfSize,Top:y-svgItem.Size,Bottom:y,Height:svgItem.Size,Width:svgItem.Size};if(svgItem.VAlign===0){textBaseline="top";rtSVG.Top=y;rtSVG.Bottom=rtSVG.Top+svgItem.Size;}else if(svgItem.VAlign===1){textBaseline='middle';rtSVG.Top=y-svgItem.Size/2;rtSVG.Bottom=rtSVG.Top+svgItem.Size;}if(rtSVG.Top<0){rtSVG.Top=0;rtSVG.Bottom=svgItem.Size;y=rtSVG.Bottom;}this.Canvas.textBaseline=textBaseline;this.Canvas.textAlign='center';this.Canvas.fillStyle=svgItem.Color;this.Canvas.fillText(svgItem.Symbol,x,y);this.AryDrawRect.push({Left:rtSVG.Left,Top:rtSVG.Top,Right:rtSVG.Right,Bottom:rtSVG.Bottom,Type:"SVG"});if(this.EnableTooltip)this.TooltipRect.push({Rect:rtSVG,Index:i});//文字
|
|
4167
|
-
if(item.Text&&item.Text.Content&&this.TextFont){var textItem=item.Text;this.Canvas.font=this.TextFont;this.Canvas.fillStyle=textItem.Color;var yText=y;if(IFrameSplitOperator.IsNumber(textItem.YOffset))yText+=textItem.YOffset;this.Canvas.fillText(textItem.Content,x,yText);}if(item.Detail){this.DrawDetail(rtSVG,item.Detail);}//连线
|
|
4166
|
+
x=pt.X;y=pt.Y;}var fontSVG=svgItem.Size+'px '+this.Family;this.Canvas.font=fontSVG;var halfSize=svgItem.Size/2;var textBaseline='bottom';var rtSVG={Left:x-halfSize,Right:x+halfSize,Top:y-svgItem.Size,Bottom:y,Height:svgItem.Size,Width:svgItem.Size};if(svgItem.VAlign===0){textBaseline="top";rtSVG.Top=y;rtSVG.Bottom=rtSVG.Top+svgItem.Size;}else if(svgItem.VAlign===1){textBaseline='middle';rtSVG.Top=y-svgItem.Size/2;rtSVG.Bottom=rtSVG.Top+svgItem.Size;}if(rtSVG.Top<0){rtSVG.Top=0;rtSVG.Bottom=svgItem.Size;y=rtSVG.Bottom;}this.Canvas.textBaseline=textBaseline;this.Canvas.textAlign='center';this.Canvas.fillStyle=svgItem.Color;this.Canvas.fillText(svgItem.Symbol,x,y);this.AryDrawRect.push({Left:rtSVG.Left,Top:rtSVG.Top,Right:rtSVG.Right,Bottom:rtSVG.Bottom,Type:"SVG",Data:item});if(this.EnableTooltip)this.TooltipRect.push({Rect:rtSVG,Index:i});//文字
|
|
4167
|
+
if(item.Text&&item.Text.Content&&this.TextFont){var textItem=item.Text;this.Canvas.font=this.TextFont;this.Canvas.fillStyle=textItem.Color;var yText=y;if(IFrameSplitOperator.IsNumber(textItem.YOffset))yText+=textItem.YOffset;this.Canvas.fillText(textItem.Content,x,yText);}if(item.Detail){this.DrawDetail(rtSVG,item.Detail,item);}//连线
|
|
4168
4168
|
if(item.Line){var lineItem=item.Line;var price;var kItem=this.Data.Data[item.Index];switch(lineItem.Value){case"C":price=kItem.Close;break;case"H":price=kItem.High;break;case"L":price=kItem.Low;break;}if(!IFrameSplitOperator.IsNumber(price))continue;var yPrice=this.ChartFrame.GetYFromData(price);if(yPrice>=rtSVG.Top&&yPrice<=rtSVG.Bottom)continue;var yText;if(yPrice<rtSVG.Top){yText=rtSVG.Top;if(IFrameSplitOperator.IsNumber(lineItem.SVGBlank)){//yPrice+=lineItem.Blank;
|
|
4169
4169
|
yText-=lineItem.SVGBlank;}}else{yText=rtSVG.Bottom;if(IFrameSplitOperator.IsNumber(lineItem.SVGBlank)){//yPrice-=lineItem.Blank;
|
|
4170
4170
|
yText+=lineItem.SVGBlank;}}if(lineItem.Dash)this.Canvas.setLineDash(lineItem.Dash);//虚线
|
|
@@ -9431,8 +9431,9 @@ var result=[];for(var _i80 in data){if(data[_i80]){if(isNumber2)result[_i80]=tru
|
|
|
9431
9431
|
//用法: REF(X,A),引用A周期前的X值.A可以是变量.
|
|
9432
9432
|
//平滑处理:当引用不到数据时进行的操作.此函数中,平滑时使用上一个周期的引用值.
|
|
9433
9433
|
//例如: REF(CLOSE,BARSCOUNT(C)-1)表示第二根K线的收盘价.
|
|
9434
|
-
this.REF=function(data,n){var result=[];if(typeof n=='number'){if(
|
|
9435
|
-
var
|
|
9434
|
+
this.REF=function(data,n){var result=[];if(typeof n=='number'){if(IFrameSplitOperator.IsNumber(data))//单数值
|
|
9435
|
+
{if(n<0)return result;var kData=this.SymbolData.Data.Data;if(!kData||kData.length<=0)return result;var count=kData.length;for(var i=n;i<count;++i){result[i]=data;}}else{if(data.length<=0)return result;if(n>=data.length)return result;result=data.slice(0,data.length-n);//平滑处理
|
|
9436
|
+
var firstData=data[0];for(var _i81=0;_i81<n;++_i81){result.unshift(firstData);}}}else//n 为数组的情况
|
|
9436
9437
|
{for(var _i82=0;_i82<data.length;++_i82){result[_i82]=null;if(_i82>=n.length)continue;var value=n[_i82];if(value>=0&&value<=_i82)result[_i82]=data[_i82-value];else if(_i82)result[_i82]=result[_i82-1];else result[_i82]=data[_i82];}}return result;};//引用若干周期前的数据(未作平滑处理).
|
|
9437
9438
|
//用法: REFV(X,A),引用A周期前的X值.A可以是变量.
|
|
9438
9439
|
//平滑处理:当引用不到数据时进行的操作.
|
|
@@ -9574,7 +9575,8 @@ this.CROSS=function(data,data2){var result=[];if(Array.isArray(data)&&Array.isAr
|
|
|
9574
9575
|
CROSSUP(MA5,MA10),ICON(1,'ICO4');//MA5上穿MA10,标注红箭头。
|
|
9575
9576
|
//CROSSUP(MA5,MA10),ICON(1,'ICO4'); 与 CROSSUP(MA5,MA10)=1,ICON(1,'ICO4');表达同等意义
|
|
9576
9577
|
*/this.CROSSUP=function(data,data2){return this.CROSS(data,data2);};//累乘
|
|
9577
|
-
this.MULAR=function(data,n){var result=[];if(!Array.isArray(n)){if(data.length<n)return result;if(n==0){var index=n;for(;index<data.length;++index){if(this.IsNumber(data[index])){result[index]=data[index];break;}}for(++index;index<data.length;++index){result[index]=result[index-1]*data[index];}}else{for(var i=n-1,j=0;i<data.length;++i,++j){for(var k=0;k<n;++k){if(k==0)result[i]=data[k+j];else result[i]*=data[k+j];}}}}else{for(var i=0;i<data.length;++i){result[i]=null;var totalCount=n[i];if(!this.IsNumber(totalCount))continue;totalCount=parseInt(totalCount);if(totalCount<0)continue;for(var j=i,k=0;j>=0&&k<totalCount;--j,++k){if(k==0)result[i]=data[j];else result[i]*=data[j];}}}return result;};this.SUM=function(data,n){var result=[];if(!Array.isArray(n)){if(n==0){
|
|
9578
|
+
this.MULAR=function(data,n){var result=[];if(!Array.isArray(n)){if(data.length<n)return result;if(n==0){var index=n;for(;index<data.length;++index){if(this.IsNumber(data[index])){result[index]=data[index];break;}}for(++index;index<data.length;++index){result[index]=result[index-1]*data[index];}}else{for(var i=n-1,j=0;i<data.length;++i,++j){for(var k=0;k<n;++k){if(k==0)result[i]=data[k+j];else result[i]*=data[k+j];}}}}else{for(var i=0;i<data.length;++i){result[i]=null;var totalCount=n[i];if(!this.IsNumber(totalCount))continue;totalCount=parseInt(totalCount);if(totalCount<0)continue;for(var j=i,k=0;j>=0&&k<totalCount;--j,++k){if(k==0)result[i]=data[j];else result[i]*=data[j];}}}return result;};this.SUM=function(data,n){var result=[];if(!Array.isArray(n)){if(n==0){var start=-1;for(var i=0;i<data.length;++i)//取第1个有效数
|
|
9579
|
+
{if(IFrameSplitOperator.IsNumber(data[i])){start=i;break;}}if(start<0)return result;result[start]=data[start];for(var i=start+1;i<data.length;++i){result[i]=result[i-1]+data[i];}}else{for(var i=n-1,j=0;i<data.length;++i,++j){for(var k=0;k<n;++k){if(k==0)result[i]=data[k+j];else result[i]+=data[k+j];}}}}else{for(var i=0;i<data.length;++i){result[i]=null;var totalCount=n[i];if(!(totalCount>0))continue;for(var j=i,k=0;j>=0&&k<totalCount;--j,++k){if(k==0)result[i]=data[j];else result[i]+=data[j];}}}return result;};/*
|
|
9578
9580
|
BARSCOUNT 有效数据周期数
|
|
9579
9581
|
求总的周期数。
|
|
9580
9582
|
用法: BARSCOUNT(X) 第一个有效数据到当前的天数。
|
|
@@ -12466,7 +12468,7 @@ this.AreaColor=g_JSChartResource.ScrollBar.BGChart.AreaColor;//面积图颜色
|
|
|
12466
12468
|
};this.Draw=function(){if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return;this.Canvas.save();if(this.LineWidth>0)this.Canvas.lineWidth=this.LineWidth*GetDevicePixelRatio();var bottom=this.ChartBorder.GetBottom();this.Canvas.strokeStyle=this.Color;var bFirstPoint=true;var drawCount=0,x,y;var firstPoint={};for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];var value=item.Close;if(!IFrameSplitOperator.IsNumber(value))continue;x=this.ChartFrame.GetXFromIndex(i);y=this.ChartFrame.GetYFromData(value);if(bFirstPoint){this.Canvas.beginPath();this.Canvas.moveTo(x,y);bFirstPoint=false;firstPoint={X:x,Y:y};}else{this.Canvas.lineTo(x,y);}++drawCount;}if(drawCount>0){this.Canvas.stroke();this.Canvas.lineTo(x,bottom);this.Canvas.lineTo(firstPoint.X,bottom);this.Canvas.closePath();this.Canvas.fillStyle=this.AreaColor;this.Canvas.fill();}this.Canvas.restore();};this.GetMaxMin=function(){var range={Max:null,Min:null};if(!this.Data||!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))return range;for(var i=0;i<this.Data.Data.length;++i){var item=this.Data.Data[i];var value=item.Close;if(!IFrameSplitOperator.IsNumber(value))continue;if(range.Max==null||range.Max<value)range.Max=value;if(range.Min==null||range.Min>value)range.Min=value;}return range;};}/********************************************************************************
|
|
12467
12469
|
* 版本信息输出
|
|
12468
12470
|
*
|
|
12469
|
-
*/var HQCHART_VERSION="1.1.
|
|
12471
|
+
*/var HQCHART_VERSION="1.1.12432";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
|
|
12470
12472
|
exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
|
|
12471
12473
|
// BaseIndex:BaseIndex,
|
|
12472
12474
|
// ChartLine:ChartLine,
|
package/package.json
CHANGED
|
@@ -2844,15 +2844,29 @@ function JSAlgorithm(errorHandler,symbolData)
|
|
|
2844
2844
|
let result=[];
|
|
2845
2845
|
if (typeof(n)=='number')
|
|
2846
2846
|
{
|
|
2847
|
-
if (data
|
|
2848
|
-
|
|
2849
|
-
|
|
2850
|
-
|
|
2851
|
-
|
|
2852
|
-
|
|
2853
|
-
|
|
2854
|
-
|
|
2855
|
-
|
|
2847
|
+
if (IFrameSplitOperator.IsNumber(data)) //单数值
|
|
2848
|
+
{
|
|
2849
|
+
if (n<0) return result;
|
|
2850
|
+
var kData=this.SymbolData.Data.Data;
|
|
2851
|
+
if (!kData || kData.length<=0) return result;
|
|
2852
|
+
var count=kData.length;
|
|
2853
|
+
for(var i=n;i<count;++i)
|
|
2854
|
+
{
|
|
2855
|
+
result[i]=data;
|
|
2856
|
+
}
|
|
2857
|
+
}
|
|
2858
|
+
else
|
|
2859
|
+
{
|
|
2860
|
+
if (data.length<=0) return result;
|
|
2861
|
+
if (n>=data.length) return result;
|
|
2862
|
+
|
|
2863
|
+
result=data.slice(0,data.length-n);
|
|
2864
|
+
|
|
2865
|
+
//平滑处理
|
|
2866
|
+
var firstData=data[0];
|
|
2867
|
+
for(let i=0;i<n;++i)
|
|
2868
|
+
result.unshift(firstData);
|
|
2869
|
+
}
|
|
2856
2870
|
}
|
|
2857
2871
|
else //n 为数组的情况
|
|
2858
2872
|
{
|
|
@@ -4130,9 +4144,21 @@ function JSAlgorithm(errorHandler,symbolData)
|
|
|
4130
4144
|
{
|
|
4131
4145
|
if (n==0)
|
|
4132
4146
|
{
|
|
4133
|
-
|
|
4147
|
+
var start=-1;
|
|
4148
|
+
for(var i=0; i<data.length; ++i) //取第1个有效数
|
|
4149
|
+
{
|
|
4150
|
+
if (IFrameSplitOperator.IsNumber(data[i]))
|
|
4151
|
+
{
|
|
4152
|
+
start=i;
|
|
4153
|
+
break;
|
|
4154
|
+
}
|
|
4155
|
+
}
|
|
4156
|
+
|
|
4157
|
+
if (start<0) return result;
|
|
4158
|
+
|
|
4159
|
+
result[start]=data[start];
|
|
4134
4160
|
|
|
4135
|
-
for (var i=1; i<data.length; ++i)
|
|
4161
|
+
for (var i=start+1; i<data.length; ++i)
|
|
4136
4162
|
{
|
|
4137
4163
|
result[i] = result[i-1]+data[i];
|
|
4138
4164
|
}
|
package/src/jscommon/umychart.js
CHANGED
|
@@ -8571,6 +8571,10 @@ function CloneData(data)
|
|
|
8571
8571
|
return item;
|
|
8572
8572
|
}
|
|
8573
8573
|
|
|
8574
|
+
function IsRecvOverlap(rect1, rect2)
|
|
8575
|
+
{
|
|
8576
|
+
return Math.max(rect1.Left,rect2.Left) < Math.min(rect1.Right,rect2.Right) && Math.max(rect1.Top,rect2.Top) < Math.min(rect1.Bottom,rect2.Bottom);
|
|
8577
|
+
}
|
|
8574
8578
|
|
|
8575
8579
|
|
|
8576
8580
|
function Point()
|
|
@@ -35117,7 +35121,7 @@ function ChartDrawSVG()
|
|
|
35117
35121
|
this.DrawSVG();
|
|
35118
35122
|
}
|
|
35119
35123
|
|
|
35120
|
-
this.DrawDetail=function(rtSVG, data)
|
|
35124
|
+
this.DrawDetail=function(rtSVG, data, svgItem)
|
|
35121
35125
|
{
|
|
35122
35126
|
if (!IFrameSplitOperator.IsNonEmptyArray(data.Content)) return;
|
|
35123
35127
|
|
|
@@ -35202,7 +35206,7 @@ function ChartDrawSVG()
|
|
|
35202
35206
|
this.Canvas.fillText(item.Data.Text, item.X, item.Y);
|
|
35203
35207
|
}
|
|
35204
35208
|
|
|
35205
|
-
this.AryDrawRect.push( {Left:rtBorder.Left, Top:rtBorder.Top, Right:rtBorder.Right, Bottom:rtBorder.Bottom, Type:"Detail" } );
|
|
35209
|
+
this.AryDrawRect.push( {Left:rtBorder.Left, Top:rtBorder.Top, Right:rtBorder.Right, Bottom:rtBorder.Bottom, Type:"Detail", Data:svgItem } );
|
|
35206
35210
|
}
|
|
35207
35211
|
|
|
35208
35212
|
this.GetDetailPosition=function(rtSVG, data)
|
|
@@ -35418,7 +35422,7 @@ function ChartDrawSVG()
|
|
|
35418
35422
|
this.Canvas.fillStyle = svgItem.Color;
|
|
35419
35423
|
this.Canvas.fillText(svgItem.Symbol, x, y);
|
|
35420
35424
|
|
|
35421
|
-
this.AryDrawRect.push( {Left:rtSVG.Left, Top:rtSVG.Top, Right:rtSVG.Right, Bottom:rtSVG.Bottom, Type:"SVG" } );
|
|
35425
|
+
this.AryDrawRect.push( {Left:rtSVG.Left, Top:rtSVG.Top, Right:rtSVG.Right, Bottom:rtSVG.Bottom, Type:"SVG", Data:item } );
|
|
35422
35426
|
|
|
35423
35427
|
if (this.EnableTooltip) this.TooltipRect.push({ Rect:rtSVG,Index:i });
|
|
35424
35428
|
|
|
@@ -35435,7 +35439,7 @@ function ChartDrawSVG()
|
|
|
35435
35439
|
|
|
35436
35440
|
if (item.Detail)
|
|
35437
35441
|
{
|
|
35438
|
-
this.DrawDetail(rtSVG,item.Detail);
|
|
35442
|
+
this.DrawDetail(rtSVG,item.Detail, item);
|
|
35439
35443
|
}
|
|
35440
35444
|
|
|
35441
35445
|
//连线
|
|
@@ -12651,6 +12651,10 @@ function CloneData(data)
|
|
|
12651
12651
|
return item;
|
|
12652
12652
|
}
|
|
12653
12653
|
|
|
12654
|
+
function IsRecvOverlap(rect1, rect2)
|
|
12655
|
+
{
|
|
12656
|
+
return Math.max(rect1.Left,rect2.Left) < Math.min(rect1.Right,rect2.Right) && Math.max(rect1.Top,rect2.Top) < Math.min(rect1.Bottom,rect2.Bottom);
|
|
12657
|
+
}
|
|
12654
12658
|
|
|
12655
12659
|
|
|
12656
12660
|
function Point()
|
|
@@ -39197,7 +39201,7 @@ function ChartDrawSVG()
|
|
|
39197
39201
|
this.DrawSVG();
|
|
39198
39202
|
}
|
|
39199
39203
|
|
|
39200
|
-
this.DrawDetail=function(rtSVG, data)
|
|
39204
|
+
this.DrawDetail=function(rtSVG, data, svgItem)
|
|
39201
39205
|
{
|
|
39202
39206
|
if (!IFrameSplitOperator.IsNonEmptyArray(data.Content)) return;
|
|
39203
39207
|
|
|
@@ -39282,7 +39286,7 @@ function ChartDrawSVG()
|
|
|
39282
39286
|
this.Canvas.fillText(item.Data.Text, item.X, item.Y);
|
|
39283
39287
|
}
|
|
39284
39288
|
|
|
39285
|
-
this.AryDrawRect.push( {Left:rtBorder.Left, Top:rtBorder.Top, Right:rtBorder.Right, Bottom:rtBorder.Bottom, Type:"Detail" } );
|
|
39289
|
+
this.AryDrawRect.push( {Left:rtBorder.Left, Top:rtBorder.Top, Right:rtBorder.Right, Bottom:rtBorder.Bottom, Type:"Detail", Data:svgItem } );
|
|
39286
39290
|
}
|
|
39287
39291
|
|
|
39288
39292
|
this.GetDetailPosition=function(rtSVG, data)
|
|
@@ -39498,7 +39502,7 @@ function ChartDrawSVG()
|
|
|
39498
39502
|
this.Canvas.fillStyle = svgItem.Color;
|
|
39499
39503
|
this.Canvas.fillText(svgItem.Symbol, x, y);
|
|
39500
39504
|
|
|
39501
|
-
this.AryDrawRect.push( {Left:rtSVG.Left, Top:rtSVG.Top, Right:rtSVG.Right, Bottom:rtSVG.Bottom, Type:"SVG" } );
|
|
39505
|
+
this.AryDrawRect.push( {Left:rtSVG.Left, Top:rtSVG.Top, Right:rtSVG.Right, Bottom:rtSVG.Bottom, Type:"SVG", Data:item } );
|
|
39502
39506
|
|
|
39503
39507
|
if (this.EnableTooltip) this.TooltipRect.push({ Rect:rtSVG,Index:i });
|
|
39504
39508
|
|
|
@@ -39515,7 +39519,7 @@ function ChartDrawSVG()
|
|
|
39515
39519
|
|
|
39516
39520
|
if (item.Detail)
|
|
39517
39521
|
{
|
|
39518
|
-
this.DrawDetail(rtSVG,item.Detail);
|
|
39522
|
+
this.DrawDetail(rtSVG,item.Detail, item);
|
|
39519
39523
|
}
|
|
39520
39524
|
|
|
39521
39525
|
//连线
|
|
@@ -94929,15 +94933,29 @@ function JSAlgorithm(errorHandler,symbolData)
|
|
|
94929
94933
|
let result=[];
|
|
94930
94934
|
if (typeof(n)=='number')
|
|
94931
94935
|
{
|
|
94932
|
-
if (data
|
|
94933
|
-
|
|
94934
|
-
|
|
94935
|
-
|
|
94936
|
-
|
|
94937
|
-
|
|
94938
|
-
|
|
94939
|
-
|
|
94940
|
-
|
|
94936
|
+
if (IFrameSplitOperator.IsNumber(data)) //单数值
|
|
94937
|
+
{
|
|
94938
|
+
if (n<0) return result;
|
|
94939
|
+
var kData=this.SymbolData.Data.Data;
|
|
94940
|
+
if (!kData || kData.length<=0) return result;
|
|
94941
|
+
var count=kData.length;
|
|
94942
|
+
for(var i=n;i<count;++i)
|
|
94943
|
+
{
|
|
94944
|
+
result[i]=data;
|
|
94945
|
+
}
|
|
94946
|
+
}
|
|
94947
|
+
else
|
|
94948
|
+
{
|
|
94949
|
+
if (data.length<=0) return result;
|
|
94950
|
+
if (n>=data.length) return result;
|
|
94951
|
+
|
|
94952
|
+
result=data.slice(0,data.length-n);
|
|
94953
|
+
|
|
94954
|
+
//平滑处理
|
|
94955
|
+
var firstData=data[0];
|
|
94956
|
+
for(let i=0;i<n;++i)
|
|
94957
|
+
result.unshift(firstData);
|
|
94958
|
+
}
|
|
94941
94959
|
}
|
|
94942
94960
|
else //n 为数组的情况
|
|
94943
94961
|
{
|
|
@@ -96215,9 +96233,21 @@ function JSAlgorithm(errorHandler,symbolData)
|
|
|
96215
96233
|
{
|
|
96216
96234
|
if (n==0)
|
|
96217
96235
|
{
|
|
96218
|
-
|
|
96236
|
+
var start=-1;
|
|
96237
|
+
for(var i=0; i<data.length; ++i) //取第1个有效数
|
|
96238
|
+
{
|
|
96239
|
+
if (IFrameSplitOperator.IsNumber(data[i]))
|
|
96240
|
+
{
|
|
96241
|
+
start=i;
|
|
96242
|
+
break;
|
|
96243
|
+
}
|
|
96244
|
+
}
|
|
96245
|
+
|
|
96246
|
+
if (start<0) return result;
|
|
96247
|
+
|
|
96248
|
+
result[start]=data[start];
|
|
96219
96249
|
|
|
96220
|
-
for (var i=1; i<data.length; ++i)
|
|
96250
|
+
for (var i=start+1; i<data.length; ++i)
|
|
96221
96251
|
{
|
|
96222
96252
|
result[i] = result[i-1]+data[i];
|
|
96223
96253
|
}
|
|
@@ -127607,7 +127637,7 @@ function ScrollBarBGChart()
|
|
|
127607
127637
|
|
|
127608
127638
|
|
|
127609
127639
|
|
|
127610
|
-
var HQCHART_VERSION="1.1.
|
|
127640
|
+
var HQCHART_VERSION="1.1.12432";
|
|
127611
127641
|
|
|
127612
127642
|
function PrintHQChartVersion()
|
|
127613
127643
|
{
|
|
@@ -12695,6 +12695,10 @@ function CloneData(data)
|
|
|
12695
12695
|
return item;
|
|
12696
12696
|
}
|
|
12697
12697
|
|
|
12698
|
+
function IsRecvOverlap(rect1, rect2)
|
|
12699
|
+
{
|
|
12700
|
+
return Math.max(rect1.Left,rect2.Left) < Math.min(rect1.Right,rect2.Right) && Math.max(rect1.Top,rect2.Top) < Math.min(rect1.Bottom,rect2.Bottom);
|
|
12701
|
+
}
|
|
12698
12702
|
|
|
12699
12703
|
|
|
12700
12704
|
function Point()
|
|
@@ -39241,7 +39245,7 @@ function ChartDrawSVG()
|
|
|
39241
39245
|
this.DrawSVG();
|
|
39242
39246
|
}
|
|
39243
39247
|
|
|
39244
|
-
this.DrawDetail=function(rtSVG, data)
|
|
39248
|
+
this.DrawDetail=function(rtSVG, data, svgItem)
|
|
39245
39249
|
{
|
|
39246
39250
|
if (!IFrameSplitOperator.IsNonEmptyArray(data.Content)) return;
|
|
39247
39251
|
|
|
@@ -39326,7 +39330,7 @@ function ChartDrawSVG()
|
|
|
39326
39330
|
this.Canvas.fillText(item.Data.Text, item.X, item.Y);
|
|
39327
39331
|
}
|
|
39328
39332
|
|
|
39329
|
-
this.AryDrawRect.push( {Left:rtBorder.Left, Top:rtBorder.Top, Right:rtBorder.Right, Bottom:rtBorder.Bottom, Type:"Detail" } );
|
|
39333
|
+
this.AryDrawRect.push( {Left:rtBorder.Left, Top:rtBorder.Top, Right:rtBorder.Right, Bottom:rtBorder.Bottom, Type:"Detail", Data:svgItem } );
|
|
39330
39334
|
}
|
|
39331
39335
|
|
|
39332
39336
|
this.GetDetailPosition=function(rtSVG, data)
|
|
@@ -39542,7 +39546,7 @@ function ChartDrawSVG()
|
|
|
39542
39546
|
this.Canvas.fillStyle = svgItem.Color;
|
|
39543
39547
|
this.Canvas.fillText(svgItem.Symbol, x, y);
|
|
39544
39548
|
|
|
39545
|
-
this.AryDrawRect.push( {Left:rtSVG.Left, Top:rtSVG.Top, Right:rtSVG.Right, Bottom:rtSVG.Bottom, Type:"SVG" } );
|
|
39549
|
+
this.AryDrawRect.push( {Left:rtSVG.Left, Top:rtSVG.Top, Right:rtSVG.Right, Bottom:rtSVG.Bottom, Type:"SVG", Data:item } );
|
|
39546
39550
|
|
|
39547
39551
|
if (this.EnableTooltip) this.TooltipRect.push({ Rect:rtSVG,Index:i });
|
|
39548
39552
|
|
|
@@ -39559,7 +39563,7 @@ function ChartDrawSVG()
|
|
|
39559
39563
|
|
|
39560
39564
|
if (item.Detail)
|
|
39561
39565
|
{
|
|
39562
|
-
this.DrawDetail(rtSVG,item.Detail);
|
|
39566
|
+
this.DrawDetail(rtSVG,item.Detail, item);
|
|
39563
39567
|
}
|
|
39564
39568
|
|
|
39565
39569
|
//连线
|
|
@@ -94973,15 +94977,29 @@ function JSAlgorithm(errorHandler,symbolData)
|
|
|
94973
94977
|
let result=[];
|
|
94974
94978
|
if (typeof(n)=='number')
|
|
94975
94979
|
{
|
|
94976
|
-
if (data
|
|
94977
|
-
|
|
94978
|
-
|
|
94979
|
-
|
|
94980
|
-
|
|
94981
|
-
|
|
94982
|
-
|
|
94983
|
-
|
|
94984
|
-
|
|
94980
|
+
if (IFrameSplitOperator.IsNumber(data)) //单数值
|
|
94981
|
+
{
|
|
94982
|
+
if (n<0) return result;
|
|
94983
|
+
var kData=this.SymbolData.Data.Data;
|
|
94984
|
+
if (!kData || kData.length<=0) return result;
|
|
94985
|
+
var count=kData.length;
|
|
94986
|
+
for(var i=n;i<count;++i)
|
|
94987
|
+
{
|
|
94988
|
+
result[i]=data;
|
|
94989
|
+
}
|
|
94990
|
+
}
|
|
94991
|
+
else
|
|
94992
|
+
{
|
|
94993
|
+
if (data.length<=0) return result;
|
|
94994
|
+
if (n>=data.length) return result;
|
|
94995
|
+
|
|
94996
|
+
result=data.slice(0,data.length-n);
|
|
94997
|
+
|
|
94998
|
+
//平滑处理
|
|
94999
|
+
var firstData=data[0];
|
|
95000
|
+
for(let i=0;i<n;++i)
|
|
95001
|
+
result.unshift(firstData);
|
|
95002
|
+
}
|
|
94985
95003
|
}
|
|
94986
95004
|
else //n 为数组的情况
|
|
94987
95005
|
{
|
|
@@ -96259,9 +96277,21 @@ function JSAlgorithm(errorHandler,symbolData)
|
|
|
96259
96277
|
{
|
|
96260
96278
|
if (n==0)
|
|
96261
96279
|
{
|
|
96262
|
-
|
|
96280
|
+
var start=-1;
|
|
96281
|
+
for(var i=0; i<data.length; ++i) //取第1个有效数
|
|
96282
|
+
{
|
|
96283
|
+
if (IFrameSplitOperator.IsNumber(data[i]))
|
|
96284
|
+
{
|
|
96285
|
+
start=i;
|
|
96286
|
+
break;
|
|
96287
|
+
}
|
|
96288
|
+
}
|
|
96289
|
+
|
|
96290
|
+
if (start<0) return result;
|
|
96291
|
+
|
|
96292
|
+
result[start]=data[start];
|
|
96263
96293
|
|
|
96264
|
-
for (var i=1; i<data.length; ++i)
|
|
96294
|
+
for (var i=start+1; i<data.length; ++i)
|
|
96265
96295
|
{
|
|
96266
96296
|
result[i] = result[i-1]+data[i];
|
|
96267
96297
|
}
|
|
@@ -127651,7 +127681,7 @@ function ScrollBarBGChart()
|
|
|
127651
127681
|
|
|
127652
127682
|
|
|
127653
127683
|
|
|
127654
|
-
var HQCHART_VERSION="1.1.
|
|
127684
|
+
var HQCHART_VERSION="1.1.12432";
|
|
127655
127685
|
|
|
127656
127686
|
function PrintHQChartVersion()
|
|
127657
127687
|
{
|