hqchart 1.1.14425 → 1.1.14439
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 +54 -58
- package/package.json +1 -1
- package/src/jscommon/umychart.PopKeyboard.js +12 -2
- package/src/jscommon/umychart.PopMinuteChart.js +8 -1
- package/src/jscommon/umychart.js +190 -281
- package/src/jscommon/umychart.report.js +56 -5
- package/src/jscommon/umychart.resource/css/tools.css +2 -0
- package/src/jscommon/umychart.uniapp.h5/umychart.uniapp.h5.js +247 -287
- package/src/jscommon/umychart.version.js +1 -1
- package/src/jscommon/umychart.vue/umychart.vue.js +267 -290
|
@@ -3994,7 +3994,6 @@ if (!JSConsole)
|
|
|
3994
3994
|
function JSChart(divElement, bOffscreen, bCacheCanvas)
|
|
3995
3995
|
{
|
|
3996
3996
|
this.DivElement=divElement;
|
|
3997
|
-
this.DivToolElement=null; //工具条
|
|
3998
3997
|
this.JSChartContainer; //画图控件
|
|
3999
3998
|
this.ResizeListener;
|
|
4000
3999
|
|
|
@@ -4090,6 +4089,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
|
|
|
4090
4089
|
//画布大小通过div获取 如果有style里的大小 使用style里的
|
|
4091
4090
|
var height=this.DivElement.offsetHeight;
|
|
4092
4091
|
var width=this.DivElement.offsetWidth;
|
|
4092
|
+
var pixelTatio = GetDevicePixelRatio(); //获取设备的分辨率s
|
|
4093
4093
|
if (this.DivElement.style.height && this.DivElement.style.width)
|
|
4094
4094
|
{
|
|
4095
4095
|
if (this.DivElement.style.height.includes("px"))
|
|
@@ -4097,21 +4097,12 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
|
|
|
4097
4097
|
if (this.DivElement.style.width.includes("px"))
|
|
4098
4098
|
width=parseInt(this.DivElement.style.width.replace("px",""));
|
|
4099
4099
|
}
|
|
4100
|
-
|
|
4101
|
-
if (this.ToolElement)
|
|
4102
|
-
{
|
|
4103
|
-
//TODO调整工具条大小
|
|
4104
|
-
height-=this.ToolElement.style.height.replace("px",""); //减去工具条的高度
|
|
4105
|
-
}
|
|
4106
4100
|
|
|
4107
|
-
this.CanvasElement.
|
|
4108
|
-
this.CanvasElement.
|
|
4109
|
-
this.CanvasElement.style.width=this.CanvasElement.width+'px';
|
|
4110
|
-
this.CanvasElement.style.height=this.CanvasElement.height+'px';
|
|
4101
|
+
this.CanvasElement.style.width=`${width}px`;
|
|
4102
|
+
this.CanvasElement.style.height=`${height}px`;
|
|
4111
4103
|
|
|
4112
|
-
|
|
4113
|
-
this.CanvasElement.
|
|
4114
|
-
this.CanvasElement.width*=pixelTatio;
|
|
4104
|
+
this.CanvasElement.height=parseInt(pixelTatio*height); //根据分辨率缩放
|
|
4105
|
+
this.CanvasElement.width=parseInt(pixelTatio*width);
|
|
4115
4106
|
|
|
4116
4107
|
if (this.OffscreenCanvasElement)
|
|
4117
4108
|
{
|
|
@@ -9914,6 +9905,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
|
|
|
9914
9905
|
for(var i=0;i<this.ExtendChartPaint.length;++i)
|
|
9915
9906
|
{
|
|
9916
9907
|
var item=this.ExtendChartPaint[i];
|
|
9908
|
+
|
|
9917
9909
|
if (item.IsCallbackDraw)
|
|
9918
9910
|
{
|
|
9919
9911
|
if (["KLineYAxisBGPaint","DepthMapPaint","BackgroundPaint","MinuteBackgroundPaint", "SessionBreaksPaint"].includes(item.ClassName))
|
|
@@ -48415,6 +48407,25 @@ function IExtendChartPainting()
|
|
|
48415
48407
|
{
|
|
48416
48408
|
return GetFontHeight(this.Canvas, font, "擎");
|
|
48417
48409
|
}
|
|
48410
|
+
|
|
48411
|
+
this.SetFillStyle=function(color, x0, y0, x1, y1)
|
|
48412
|
+
{
|
|
48413
|
+
if (Array.isArray(color))
|
|
48414
|
+
{
|
|
48415
|
+
let gradient = this.Canvas.createLinearGradient(x0, y0, x1, y1);
|
|
48416
|
+
var offset=1/(color.length-1);
|
|
48417
|
+
for(var i=0; i<color.length; ++i)
|
|
48418
|
+
{
|
|
48419
|
+
var value=i*offset;
|
|
48420
|
+
gradient.addColorStop(value, color[i]);
|
|
48421
|
+
}
|
|
48422
|
+
this.Canvas.fillStyle=gradient;
|
|
48423
|
+
}
|
|
48424
|
+
else
|
|
48425
|
+
{
|
|
48426
|
+
this.Canvas.fillStyle=color;
|
|
48427
|
+
}
|
|
48428
|
+
}
|
|
48418
48429
|
}
|
|
48419
48430
|
|
|
48420
48431
|
//K线Tooltip, 显示在左边或右边
|
|
@@ -52584,7 +52595,7 @@ function KLineYAxisBGPaint()
|
|
|
52584
52595
|
}
|
|
52585
52596
|
|
|
52586
52597
|
|
|
52587
|
-
//背景图 支持横屏
|
|
52598
|
+
//背景图 支持横屏 新版本
|
|
52588
52599
|
function BackgroundPaint()
|
|
52589
52600
|
{
|
|
52590
52601
|
this.newMethod=IExtendChartPainting; //派生
|
|
@@ -52596,327 +52607,210 @@ function BackgroundPaint()
|
|
|
52596
52607
|
this.IsDynamic=false;
|
|
52597
52608
|
this.IsCallbackDraw=true; //在回调函数里绘制, 不在Draw()中绘制
|
|
52598
52609
|
|
|
52610
|
+
this.IsDrawAllFrame=false; //全部的指标框都画
|
|
52611
|
+
this.SetDrawFrameID=new Set([0]); //指定几个指标框画
|
|
52612
|
+
|
|
52599
52613
|
this.FrameID=0;
|
|
52600
|
-
this.Data;
|
|
52614
|
+
this.Data; //背景数据[ { Start:{ Date:, Time: }, End:{ Date:, Time }, Color:['rgb(44,55,255)','rgb(200,55,255)'] }]
|
|
52615
|
+
this.IsShow=true;
|
|
52616
|
+
this.SubFrame=null;
|
|
52617
|
+
|
|
52601
52618
|
this.ID=Guid(); //唯一的ID
|
|
52602
|
-
|
|
52603
|
-
/*
|
|
52604
|
-
this.Data=
|
|
52605
|
-
[
|
|
52606
|
-
{ Start:{ Date:20181201 }, End:{ Date:20181230 }, Color:'rgb(44,55,44)' } ,
|
|
52607
|
-
{ Start:{ Date:20190308 }, End:{ Date:20190404 }, Color:['rgb(44,55,255)','rgb(200,55,255)'] }
|
|
52608
|
-
]
|
|
52609
|
-
*/
|
|
52610
|
-
|
|
52611
|
-
this.ChartSubFrame;
|
|
52612
|
-
this.ChartBorder;
|
|
52613
|
-
this.KData;
|
|
52614
|
-
this.Period;
|
|
52615
|
-
this.XPointCount=0;
|
|
52619
|
+
this.HQChart;
|
|
52616
52620
|
|
|
52617
52621
|
this.SetOption=function(option) //设置
|
|
52618
52622
|
{
|
|
52619
|
-
if (option
|
|
52623
|
+
if (!option) return;
|
|
52624
|
+
|
|
52625
|
+
if (IFrameSplitOperator.IsNumber(option.FrameID)) this.FrameID=option.FrameID;
|
|
52620
52626
|
if (IFrameSplitOperator.IsObjectExist(option.ID)) this.ID=option.ID;
|
|
52627
|
+
if (IFrameSplitOperator.IsBool(option.IsDrawAllFrame)) this.IsDrawAllFrame=option.IsDrawAllFrame;
|
|
52628
|
+
if (IFrameSplitOperator.IsNonEmptyArray(option.AryFrameID)) this.SetDrawFrameID=new Set(option.AryFrameID);
|
|
52621
52629
|
}
|
|
52622
52630
|
|
|
52623
52631
|
this.Draw=function()
|
|
52624
52632
|
{
|
|
52625
|
-
|
|
52626
|
-
|
|
52627
|
-
|
|
52628
|
-
if (!
|
|
52629
|
-
|
|
52630
|
-
this.
|
|
52631
|
-
|
|
52632
|
-
this.
|
|
52633
|
-
this.
|
|
52634
|
-
if (!this.
|
|
52635
|
-
|
|
52636
|
-
var
|
|
52637
|
-
|
|
52638
|
-
|
|
52639
|
-
|
|
52640
|
-
|
|
52641
|
-
var
|
|
52642
|
-
|
|
52643
|
-
var
|
|
52644
|
-
var
|
|
52645
|
-
|
|
52646
|
-
|
|
52647
|
-
|
|
52648
|
-
var bottom=this.ChartBorder.GetBottomEx();
|
|
52649
|
-
var top=this.ChartBorder.GetTopEx();
|
|
52650
|
-
var height=this.ChartBorder.GetHeightEx();
|
|
52651
|
-
if (isHScreen)
|
|
52633
|
+
this.SubFrame=null;
|
|
52634
|
+
|
|
52635
|
+
if (this.FrameID<0) return;
|
|
52636
|
+
if (!this.HQChart) return;
|
|
52637
|
+
if (!this.ChartFrame || !IFrameSplitOperator.IsNonEmptyArray(this.ChartFrame.SubFrame)) return;
|
|
52638
|
+
if (!this.IsShow) return;
|
|
52639
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(this.Data)) return;
|
|
52640
|
+
if (!this.ChartFrame.SubFrame[this.FrameID]) return;
|
|
52641
|
+
this.SubFrame=this.ChartFrame.SubFrame[this.FrameID].Frame;
|
|
52642
|
+
if (!this.SubFrame) return;
|
|
52643
|
+
|
|
52644
|
+
var kData=this.HQChart.GetKData();
|
|
52645
|
+
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return;
|
|
52646
|
+
|
|
52647
|
+
var bHScreen=(this.SubFrame.IsHScreen===true);
|
|
52648
|
+
this.IsHScreen=bHScreen;
|
|
52649
|
+
var isMinute=this.SubFrame.IsMinuteFrame();
|
|
52650
|
+
var dataWidth=this.SubFrame.DataWidth;
|
|
52651
|
+
var distanceWidth=this.SubFrame.DistanceWidth;
|
|
52652
|
+
var xPointCount=this.SubFrame.XPointCount;
|
|
52653
|
+
|
|
52654
|
+
var border=this.SubFrame.GetBorder();
|
|
52655
|
+
if (bHScreen)
|
|
52652
52656
|
{
|
|
52653
|
-
|
|
52654
|
-
|
|
52655
|
-
|
|
52657
|
+
var chartright=border.BottomEx;
|
|
52658
|
+
var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
52659
|
+
}
|
|
52660
|
+
else
|
|
52661
|
+
{
|
|
52662
|
+
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
52663
|
+
var chartright=border.RightEx;
|
|
52656
52664
|
}
|
|
52657
52665
|
|
|
52658
|
-
|
|
52666
|
+
var mapBG=new Map(); //key= index, Value={ Start:{Left, Center, Right, Item:}, End:{ Left, Center, Right, Item:} }
|
|
52667
|
+
var startIndex=kData.DataOffset;
|
|
52668
|
+
for(var i=startIndex,j=0;i<kData.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
|
|
52659
52669
|
{
|
|
52660
|
-
var
|
|
52661
|
-
var
|
|
52662
|
-
if (!
|
|
52670
|
+
var kItem=kData.Data[i];
|
|
52671
|
+
var aryFind=this.FindMatchData(kItem);
|
|
52672
|
+
if (!aryFind) continue;
|
|
52663
52673
|
|
|
52664
|
-
if (
|
|
52674
|
+
if (isMinute)
|
|
52665
52675
|
{
|
|
52666
|
-
var
|
|
52667
|
-
|
|
52668
|
-
|
|
52669
|
-
var offset=1/item.Color.length;
|
|
52670
|
-
for(var i in item.Color)
|
|
52671
|
-
{
|
|
52672
|
-
gradient.addColorStop(i*offset, item.Color[i]);
|
|
52673
|
-
}
|
|
52674
|
-
this.Canvas.fillStyle=gradient;
|
|
52676
|
+
var x=this.ChartFrame.GetXFromIndex(j);
|
|
52677
|
+
var left=x;
|
|
52678
|
+
var right=x;
|
|
52675
52679
|
}
|
|
52676
52680
|
else
|
|
52677
52681
|
{
|
|
52678
|
-
|
|
52682
|
+
var left=xOffset;
|
|
52683
|
+
var right=xOffset+dataWidth;
|
|
52684
|
+
var x=left+(right-left)/2;
|
|
52679
52685
|
}
|
|
52680
52686
|
|
|
52681
|
-
|
|
52682
|
-
|
|
52687
|
+
for(var k=0;k<aryFind.length;++k)
|
|
52688
|
+
{
|
|
52689
|
+
var findItem=aryFind[k];
|
|
52690
|
+
if (mapBG.has(findItem.Index))
|
|
52691
|
+
{
|
|
52692
|
+
var bgItem=mapBG.get(findItem.Index);
|
|
52693
|
+
bgItem.End.Left=left;
|
|
52694
|
+
bgItem.End.Right=right;
|
|
52695
|
+
bgItem.End.Item=findItem.Item;
|
|
52696
|
+
}
|
|
52697
|
+
else
|
|
52698
|
+
{
|
|
52699
|
+
mapBG.set(findItem.Index, { Item:findItem.Item, Start:{ Left:left, Right:right, Item:findItem.Item }, End:{ Left:left, Right:right, Item:findItem.Item }})
|
|
52700
|
+
}
|
|
52701
|
+
}
|
|
52702
|
+
}
|
|
52703
|
+
|
|
52704
|
+
if (mapBG.size>0)
|
|
52705
|
+
{
|
|
52706
|
+
this.Canvas.save();
|
|
52707
|
+
//this.ClipClient(bHScreen);
|
|
52708
|
+
|
|
52709
|
+
this.DrawBG(mapBG);
|
|
52710
|
+
|
|
52711
|
+
this.Canvas.restore();
|
|
52683
52712
|
}
|
|
52684
52713
|
}
|
|
52685
52714
|
|
|
52686
|
-
this.
|
|
52715
|
+
this.FindMatchData=function(kItem)
|
|
52687
52716
|
{
|
|
52688
|
-
|
|
52689
|
-
|
|
52690
|
-
var aryData=[];
|
|
52717
|
+
var aryFind=[];
|
|
52691
52718
|
for(var i=0;i<this.Data.length;++i)
|
|
52692
52719
|
{
|
|
52693
52720
|
var item=this.Data[i];
|
|
52694
|
-
var
|
|
52695
|
-
|
|
52696
|
-
|
|
52697
|
-
|
|
52698
|
-
if (item.Start.Date<first.Date && item.End.Date>end.Date)
|
|
52721
|
+
var start=item.Start;
|
|
52722
|
+
var end=item.End;
|
|
52723
|
+
var bMatch=false;
|
|
52724
|
+
if (IFrameSplitOperator.IsNumber(kItem.Date) && IFrameSplitOperator.IsNumber(kItem.Time))
|
|
52699
52725
|
{
|
|
52700
|
-
|
|
52701
|
-
|
|
52726
|
+
if (kItem.Date>start.Date && kItem.Date<end.Date)
|
|
52727
|
+
{
|
|
52728
|
+
bMatch=true;
|
|
52729
|
+
}
|
|
52730
|
+
else if (kItem.Date==start.Date && kItem.Date==end.Date)
|
|
52731
|
+
{
|
|
52732
|
+
if (kItem.Time>=start.Time && kItem.Time<=end.Time)bMatch=true;
|
|
52733
|
+
}
|
|
52734
|
+
else if (kItem.Date==start.Date)
|
|
52735
|
+
{
|
|
52736
|
+
if (kItem.Time>=start.Time) bMatch=true;
|
|
52737
|
+
}
|
|
52738
|
+
else if (kItem.Date==end.Date)
|
|
52739
|
+
{
|
|
52740
|
+
if ((kItem.Time<=end.Time)) bMatch=true;
|
|
52741
|
+
}
|
|
52702
52742
|
}
|
|
52703
|
-
|
|
52704
|
-
|
|
52705
|
-
if (showItem.Start || showItem.End)
|
|
52743
|
+
else if (IFrameSplitOperator.IsNumber(kItem.Date) && !IFrameSplitOperator.IsNumber(kItem.Time))
|
|
52706
52744
|
{
|
|
52707
|
-
|
|
52708
|
-
aryData.push(showItem);
|
|
52745
|
+
if (kItem.Date>=start.Date && kItem.Date<=end.Date) bMatch=true;
|
|
52709
52746
|
}
|
|
52747
|
+
|
|
52748
|
+
if (bMatch) aryFind.push({ Index:i, Item:item });
|
|
52710
52749
|
}
|
|
52711
52750
|
|
|
52712
|
-
|
|
52713
|
-
|
|
52751
|
+
if (aryFind.Length<=0) return null;
|
|
52752
|
+
|
|
52753
|
+
return aryFind;
|
|
52714
52754
|
}
|
|
52715
52755
|
|
|
52716
|
-
this.
|
|
52756
|
+
this.DrawBG=function(mapBG)
|
|
52717
52757
|
{
|
|
52718
|
-
var
|
|
52719
|
-
var dataWidth=this.ChartSubFrame.DataWidth;
|
|
52720
|
-
var distanceWidth=this.ChartSubFrame.DistanceWidth;
|
|
52721
|
-
var xOffset=this.ChartBorder.GetLeft()+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
52722
|
-
if (isHScreen) xOffset=this.ChartBorder.GetTop()+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
52723
|
-
var chartright=this.ChartBorder.GetRight();
|
|
52724
|
-
if (isHScreen) chartright=this.ChartBorder.GetBottom();
|
|
52725
|
-
|
|
52726
|
-
var mapKLine={ Data:new Map() ,Start:null, End:null } ; //Key: date / date time, Value:索引
|
|
52727
|
-
for(var i=this.KData.DataOffset,j=0; i<this.KData.Data.length && j<this.XPointCount; ++i,++j,xOffset+=(dataWidth+distanceWidth))
|
|
52758
|
+
for(var mapItem of mapBG)
|
|
52728
52759
|
{
|
|
52729
|
-
var
|
|
52730
|
-
|
|
52731
|
-
|
|
52732
|
-
|
|
52733
|
-
var x=left+(right-left)/2;
|
|
52734
|
-
|
|
52735
|
-
if (j==0) mapKLine.XLeft=left;
|
|
52736
|
-
mapKLine.XRight=right;
|
|
52737
|
-
|
|
52738
|
-
var value={ Index:i, ShowIndex:j , X:x, Right:right, Left:left, Date:kItem.Date };
|
|
52739
|
-
if (ChartData.IsMinutePeriod(this.Period,true))
|
|
52740
|
-
{
|
|
52741
|
-
var key=`Date:${kItem.Date} Time:${kItem.Time}`;
|
|
52742
|
-
value.Time=kItem.Time;
|
|
52743
|
-
}
|
|
52744
|
-
else
|
|
52760
|
+
var bgItem=mapItem[1];
|
|
52761
|
+
//this.DrawBGItem(this.SubFrame, bgItem);
|
|
52762
|
+
|
|
52763
|
+
for(var i=0;i<this.ChartFrame.SubFrame.length;++i)
|
|
52745
52764
|
{
|
|
52746
|
-
var
|
|
52765
|
+
var subFrame=this.ChartFrame.SubFrame[i].Frame;
|
|
52766
|
+
if (this.IsDrawAllFrame || this.SetDrawFrameID.has(i))
|
|
52767
|
+
{
|
|
52768
|
+
this.DrawBGItem(subFrame, bgItem);
|
|
52769
|
+
}
|
|
52747
52770
|
}
|
|
52748
|
-
|
|
52749
|
-
mapKLine.Data.set(key,value);
|
|
52750
|
-
|
|
52751
|
-
//保存下起始和结束位置
|
|
52752
|
-
if (j==0) mapKLine.Start=value;
|
|
52753
|
-
mapKLine.End=value;
|
|
52754
52771
|
}
|
|
52755
|
-
|
|
52756
|
-
return mapKLine;
|
|
52757
52772
|
}
|
|
52758
52773
|
|
|
52759
|
-
this.
|
|
52774
|
+
this.DrawBGItem=function(frame, bgItem)
|
|
52760
52775
|
{
|
|
52761
|
-
var
|
|
52762
|
-
|
|
52763
|
-
var bSingleDate=false;
|
|
52764
|
-
//JSConsole.Chart.Log('[BackgroundPaint::GetBGCoordinate] item ', item);
|
|
52765
|
-
if (isMinutePeriod)
|
|
52766
|
-
{
|
|
52767
|
-
if (item.Start && item.End && item.Start.Date==item.End.Date && item.Start.Time==item.End.Time) bSingleDate=true;
|
|
52768
|
-
}
|
|
52769
|
-
else
|
|
52770
|
-
{
|
|
52771
|
-
if (item.Start && item.End && item.Start.Date==item.End.Date) bSingleDate=true;
|
|
52772
|
-
}
|
|
52773
|
-
|
|
52774
|
-
if (bSingleDate)
|
|
52775
|
-
{
|
|
52776
|
-
if (isMinutePeriod)
|
|
52777
|
-
var key=`Date:${item.Start.Date} Time:${item.Start.Time}`;
|
|
52778
|
-
else
|
|
52779
|
-
var key=`Date:${item.Start.Date}`;
|
|
52780
|
-
|
|
52781
|
-
if (!kLineMap.Data.has(key)) return null;
|
|
52782
|
-
var findItem=kLineMap.Data.get(key);
|
|
52783
|
-
xLeft=findItem.Left;
|
|
52784
|
-
xRight=findItem.Right;
|
|
52785
|
-
return { Left:xLeft, Right:xRight, Width:xRight-xLeft };
|
|
52786
|
-
}
|
|
52787
|
-
|
|
52788
|
-
if (item.Start)
|
|
52776
|
+
var border=frame.GetBorder();
|
|
52777
|
+
if (this.IsHScreen)
|
|
52789
52778
|
{
|
|
52790
|
-
|
|
52791
|
-
|
|
52792
|
-
|
|
52793
|
-
var key=`Date:${item.Start.Date}`;
|
|
52794
|
-
|
|
52795
|
-
if (kLineMap.Data.has(key))
|
|
52796
|
-
{
|
|
52797
|
-
var findItem=kLineMap.Data.get(key);
|
|
52798
|
-
xLeft=findItem.Left;
|
|
52799
|
-
}
|
|
52800
|
-
else
|
|
52801
|
-
{
|
|
52802
|
-
if (isMinutePeriod)
|
|
52803
|
-
{
|
|
52804
|
-
if (item.Start.Date<kLineMap.Start.Date || (item.Start.Date==kLineMap.Start.Date && item.Start.Time<=kLineMap.Start.Time) )
|
|
52805
|
-
{
|
|
52806
|
-
xLeft=kLineMap.Start.Left;
|
|
52807
|
-
}
|
|
52808
|
-
else
|
|
52809
|
-
{
|
|
52810
|
-
for(var kItem of kLineMap.Data)
|
|
52811
|
-
{
|
|
52812
|
-
var value=kItem[1];
|
|
52813
|
-
if (value.Date>item.Start.Date || (value.Date==item.Start.Date && value.Time>item.Start.Time))
|
|
52814
|
-
{
|
|
52815
|
-
xLeft=value.Left;
|
|
52816
|
-
break;
|
|
52817
|
-
}
|
|
52818
|
-
}
|
|
52819
|
-
}
|
|
52820
|
-
}
|
|
52821
|
-
else
|
|
52822
|
-
{
|
|
52823
|
-
if (item.Start.Date<=kLineMap.Start.Date)
|
|
52824
|
-
{
|
|
52825
|
-
xLeft=kLineMap.Start.Left;
|
|
52826
|
-
}
|
|
52827
|
-
else
|
|
52828
|
-
{
|
|
52829
|
-
for(var kItem of kLineMap.Data)
|
|
52830
|
-
{
|
|
52831
|
-
var value=kItem[1];
|
|
52832
|
-
if (value.Date>item.Start.Date)
|
|
52833
|
-
{
|
|
52834
|
-
xLeft=value.Left;
|
|
52835
|
-
break;
|
|
52836
|
-
}
|
|
52837
|
-
}
|
|
52838
|
-
}
|
|
52839
|
-
}
|
|
52840
|
-
}
|
|
52779
|
+
var top=border.RightEx;
|
|
52780
|
+
var bottom=border.LeftEx;
|
|
52781
|
+
var left=border.Top;
|
|
52841
52782
|
}
|
|
52842
52783
|
else
|
|
52843
52784
|
{
|
|
52844
|
-
|
|
52785
|
+
var top=border.TopEx;
|
|
52786
|
+
var bottom=border.BottomEx;
|
|
52787
|
+
var left=border.Left;
|
|
52845
52788
|
}
|
|
52846
52789
|
|
|
52847
|
-
if (
|
|
52790
|
+
if (this.IsHScreen)
|
|
52848
52791
|
{
|
|
52849
|
-
|
|
52850
|
-
|
|
52851
|
-
|
|
52852
|
-
|
|
52853
|
-
|
|
52854
|
-
|
|
52855
|
-
|
|
52856
|
-
var findItem=kLineMap.Data.get(key);
|
|
52857
|
-
xRight=findItem.Right;
|
|
52858
|
-
}
|
|
52859
|
-
else
|
|
52860
|
-
{
|
|
52861
|
-
if (isMinutePeriod)
|
|
52862
|
-
{
|
|
52863
|
-
if (item.End.Date<kLineMap.Start.Date || (item.End.Date==kLineMap.Start.Date && item.End.Time<kLineMap.Start.Time)) return null;
|
|
52864
|
-
|
|
52865
|
-
if (item.End.Date<kLineMap.End.Date || (item.End.Date==kLineMap.End.Date && item.End.Time>=kLineMap.End.Time) )
|
|
52866
|
-
{
|
|
52867
|
-
xRight=kLineMap.End.Right;
|
|
52868
|
-
}
|
|
52869
|
-
else
|
|
52870
|
-
{
|
|
52871
|
-
var previousX=null;
|
|
52872
|
-
for(var kItem of kLineMap.Data)
|
|
52873
|
-
{
|
|
52874
|
-
var value=kItem[1];
|
|
52875
|
-
if (value.Date>item.End.Date || (value.Date==item.End.Date && value.Time>item.End.Time) )
|
|
52876
|
-
{
|
|
52877
|
-
xRight=previousX;
|
|
52878
|
-
break;
|
|
52879
|
-
}
|
|
52880
|
-
previousX=value.Right;
|
|
52881
|
-
}
|
|
52882
|
-
}
|
|
52883
|
-
}
|
|
52884
|
-
else
|
|
52885
|
-
{
|
|
52886
|
-
if (item.End.Date<kLineMap.Start.Date) return null;
|
|
52887
|
-
|
|
52888
|
-
if (item.End.Date<=kLineMap.End.Date)
|
|
52889
|
-
{
|
|
52890
|
-
xRight=kLineMap.End.Right;
|
|
52891
|
-
}
|
|
52892
|
-
else
|
|
52893
|
-
{
|
|
52894
|
-
var previousX=null;
|
|
52895
|
-
for(var kItem of kLineMap.Data)
|
|
52896
|
-
{
|
|
52897
|
-
var value=kItem[1];
|
|
52898
|
-
if (value.Date>item.End.Date)
|
|
52899
|
-
{
|
|
52900
|
-
xRight=previousX;
|
|
52901
|
-
break;
|
|
52902
|
-
}
|
|
52903
|
-
previousX=value.Right;
|
|
52904
|
-
}
|
|
52905
|
-
}
|
|
52906
|
-
}
|
|
52907
|
-
}
|
|
52792
|
+
this.SetFillStyle(bgItem.Item.Color,top,left,bottom,left);
|
|
52793
|
+
var start=bgItem.Start;
|
|
52794
|
+
var end=bgItem.End;
|
|
52795
|
+
var rtBG={ Left:bottom, Right:top, Top:start.Left, Bottom:end.Right };
|
|
52796
|
+
rtBG.Width=rtBG.Right-rtBG.Left;
|
|
52797
|
+
rtBG.Height=rtBG.Bottom-rtBG.Top;
|
|
52798
|
+
this.Canvas.fillRect(ToFixedRect(rtBG.Left),ToFixedRect(rtBG.Top),ToFixedRect(rtBG.Width),ToFixedRect(rtBG.Height));
|
|
52908
52799
|
}
|
|
52909
52800
|
else
|
|
52910
52801
|
{
|
|
52911
|
-
|
|
52802
|
+
this.SetFillStyle(bgItem.Item.Color, left,top, left,bottom);
|
|
52803
|
+
var start=bgItem.Start;
|
|
52804
|
+
var end=bgItem.End;
|
|
52805
|
+
var rtBG={ Left:start.Left, Right:end.Right, Top:top, Bottom:bottom };
|
|
52806
|
+
rtBG.Width=rtBG.Right-rtBG.Left;
|
|
52807
|
+
rtBG.Height=rtBG.Bottom-rtBG.Top;
|
|
52808
|
+
this.Canvas.fillRect(ToFixedRect(rtBG.Left),ToFixedRect(rtBG.Top),ToFixedRect(rtBG.Width),ToFixedRect(rtBG.Height));
|
|
52912
52809
|
}
|
|
52913
|
-
|
|
52914
|
-
if (xLeft==null || xRight==null) return null;
|
|
52915
|
-
|
|
52916
|
-
return { Left:xLeft, Right:xRight, Width:xRight-xLeft };
|
|
52917
52810
|
}
|
|
52918
52811
|
}
|
|
52919
52812
|
|
|
52813
|
+
|
|
52920
52814
|
function MinuteBackgroundPaint()
|
|
52921
52815
|
{
|
|
52922
52816
|
this.newMethod=IExtendChartPainting; //派生
|
|
@@ -62516,7 +62410,7 @@ function DynamicChartTitlePainting()
|
|
|
62516
62410
|
var left=positionInfo.Left;
|
|
62517
62411
|
var right=positionInfo.Right;
|
|
62518
62412
|
var bottom=positionInfo.Bottom;
|
|
62519
|
-
|
|
62413
|
+
var pixelRatio=GetDevicePixelRatio();
|
|
62520
62414
|
for(var i=0; i<this.Data.length; ++i)
|
|
62521
62415
|
{
|
|
62522
62416
|
var item=this.Data[i];
|
|
@@ -62535,7 +62429,9 @@ function DynamicChartTitlePainting()
|
|
|
62535
62429
|
if (titleItem.Name) text=titleItem.Name+":"+titleItem.Text;
|
|
62536
62430
|
else text=titleItem.Text;
|
|
62537
62431
|
|
|
62538
|
-
|
|
62432
|
+
if (IFrameSplitOperator.IsNumber(titleItem.LeftSpace)) left+=titleItem.LeftSpace*pixelRatio;
|
|
62433
|
+
|
|
62434
|
+
var space=this.ParamSpace*pixelRatio;
|
|
62539
62435
|
var indexTextWidth=this.Canvas.measureText(text).width; //标题+数值长度
|
|
62540
62436
|
var textWidth=indexTextWidth;
|
|
62541
62437
|
|
|
@@ -62611,7 +62507,7 @@ function DynamicChartTitlePainting()
|
|
|
62611
62507
|
if (dyTitle) text=dyTitle+":"+valueText;
|
|
62612
62508
|
else text=item.Name+":"+valueText;
|
|
62613
62509
|
}
|
|
62614
|
-
var space=this.ParamSpace*
|
|
62510
|
+
var space=this.ParamSpace*pixelRatio;
|
|
62615
62511
|
var textWidth=this.Canvas.measureText(text).width+space;
|
|
62616
62512
|
if ((left+textWidth)>right) break;
|
|
62617
62513
|
|
|
@@ -80187,12 +80083,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
80187
80083
|
var item=option.PopMinuteChart;
|
|
80188
80084
|
this.PopMinuteChart=new JSPopMinuteChart();
|
|
80189
80085
|
this.PopMinuteChart.Inital(this, item);
|
|
80086
|
+
this.PopMinuteChart.Create();
|
|
80190
80087
|
return true;
|
|
80191
80088
|
}
|
|
80192
80089
|
else if (option.KLine && option.KLine.KLineDoubleClick===true) //旧的格式 不要使用了
|
|
80193
80090
|
{
|
|
80194
80091
|
this.PopMinuteChart=new JSPopMinuteChart();
|
|
80195
80092
|
this.PopMinuteChart.Inital(this);
|
|
80093
|
+
this.PopMinuteChart.Create();
|
|
80196
80094
|
return true;
|
|
80197
80095
|
}
|
|
80198
80096
|
|
|
@@ -83774,6 +83672,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
83774
83672
|
chart.SetOption(option);
|
|
83775
83673
|
this.ExtendChartPaint.push(chart);
|
|
83776
83674
|
return chart;
|
|
83675
|
+
case "BackgroundPaint":
|
|
83777
83676
|
case '背景图':
|
|
83778
83677
|
chart=new BackgroundPaint();
|
|
83779
83678
|
chart.Canvas=this.Canvas;
|
|
@@ -92374,6 +92273,16 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
92374
92273
|
chart.SetOption(option);
|
|
92375
92274
|
this.ExtendChartPaint.push(chart);
|
|
92376
92275
|
return chart;
|
|
92276
|
+
case "BackgroundPaint":
|
|
92277
|
+
case "背景图":
|
|
92278
|
+
chart=new BackgroundPaint();
|
|
92279
|
+
chart.Canvas=this.Canvas;
|
|
92280
|
+
chart.ChartBorder=this.Frame.ChartBorder;
|
|
92281
|
+
chart.ChartFrame=this.Frame;
|
|
92282
|
+
chart.HQChart=this;
|
|
92283
|
+
chart.SetOption(option);
|
|
92284
|
+
this.ExtendChartPaint.push(chart);
|
|
92285
|
+
return chart;
|
|
92377
92286
|
default:
|
|
92378
92287
|
chart=g_ExtendChartPaintFactory.Create(name);
|
|
92379
92288
|
if (!chart) return null;
|
|
@@ -132624,19 +132533,21 @@ function JSReportChartContainer(uielement)
|
|
|
132624
132533
|
}
|
|
132625
132534
|
break;
|
|
132626
132535
|
case 38: //up
|
|
132627
|
-
var result=this.MoveSelectedRow(-1);
|
|
132536
|
+
var result=this.MoveSelectedRow(-1, {EnablePageCycle: this.PageUpDownCycle});
|
|
132628
132537
|
if (result)
|
|
132629
132538
|
{
|
|
132630
132539
|
if (result.Redraw) this.Draw();
|
|
132631
132540
|
if (result.Update) this.DelayUpdateStockData();
|
|
132541
|
+
this.MoveSelectedRowEvent(result.OldIndex, result.NewIndex);
|
|
132632
132542
|
}
|
|
132633
132543
|
break;
|
|
132634
132544
|
case 40: //down
|
|
132635
|
-
var result=this.MoveSelectedRow(1)
|
|
132545
|
+
var result=this.MoveSelectedRow(1, {EnablePageCycle: this.PageUpDownCycle})
|
|
132636
132546
|
if (result)
|
|
132637
132547
|
{
|
|
132638
132548
|
if (result.Redraw) this.Draw();
|
|
132639
132549
|
if (result.Update) this.DelayUpdateStockData();
|
|
132550
|
+
this.MoveSelectedRowEvent(result.OldIndex, result.NewIndex);
|
|
132640
132551
|
}
|
|
132641
132552
|
break;
|
|
132642
132553
|
case 37: //left
|
|
@@ -133797,13 +133708,19 @@ function JSReportChartContainer(uielement)
|
|
|
133797
133708
|
return false;
|
|
133798
133709
|
}
|
|
133799
133710
|
|
|
133800
|
-
|
|
133711
|
+
// option={ EnablePageCycle: true/false(是否循环翻页) }
|
|
133712
|
+
this.MoveSelectedRow=function(step, option)
|
|
133801
133713
|
{
|
|
133802
133714
|
var chart=this.ChartPaint[0];
|
|
133803
133715
|
if (!chart) return null;
|
|
133804
133716
|
if (!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return null;
|
|
133717
|
+
var bPageCycle=false;
|
|
133718
|
+
if (option)
|
|
133719
|
+
{
|
|
133720
|
+
if (IFrameSplitOperator.IsBool(option.EnablePageCycle)) bPageCycle=option.EnablePageCycle;
|
|
133721
|
+
}
|
|
133805
133722
|
|
|
133806
|
-
var result={ Redraw:false, Update:false }; //Redraw=重绘, Update=更新数据
|
|
133723
|
+
var result={ Redraw:false, Update:false, OldIndex:-1, NewIndex:-1 }; //Redraw=重绘, Update=更新数据
|
|
133807
133724
|
|
|
133808
133725
|
if (chart.MultiSelectModel==1)
|
|
133809
133726
|
{
|
|
@@ -133905,6 +133822,7 @@ function JSReportChartContainer(uielement)
|
|
|
133905
133822
|
var pageStatus=chart.GetCurrentPageStatus();
|
|
133906
133823
|
var pageSize=pageStatus.End-pageStatus.Start+1;
|
|
133907
133824
|
var selected=pageStatus.SelectedRow;
|
|
133825
|
+
result.OldIndex=this.Data.YOffset+selected;
|
|
133908
133826
|
if (step>0)
|
|
133909
133827
|
{
|
|
133910
133828
|
selected+=step;
|
|
@@ -133912,6 +133830,7 @@ function JSReportChartContainer(uielement)
|
|
|
133912
133830
|
chart.SelectedRow=selected;
|
|
133913
133831
|
chart.SelectedFixedRow=-1;
|
|
133914
133832
|
result.Redraw=true;
|
|
133833
|
+
result.NewIndex=this.Data.YOffset+selected;
|
|
133915
133834
|
return result;
|
|
133916
133835
|
}
|
|
133917
133836
|
else if (step<0)
|
|
@@ -133925,6 +133844,7 @@ function JSReportChartContainer(uielement)
|
|
|
133925
133844
|
|
|
133926
133845
|
chart.SelectedRow=selected;
|
|
133927
133846
|
chart.SelectedFixedRow=-1;
|
|
133847
|
+
result.NewIndex=this.Data.YOffset+selected;
|
|
133928
133848
|
result.Redraw=true;
|
|
133929
133849
|
return result;
|
|
133930
133850
|
}
|
|
@@ -133934,18 +133854,23 @@ function JSReportChartContainer(uielement)
|
|
|
133934
133854
|
var pageStatus=chart.GetCurrentPageStatus();
|
|
133935
133855
|
var pageSize=pageStatus.PageSize;
|
|
133936
133856
|
var selected=pageStatus.SelectedRow;
|
|
133857
|
+
result.OldIndex=pageStatus.SelectedRow;
|
|
133937
133858
|
if (step>0)
|
|
133938
133859
|
{
|
|
133939
133860
|
if (selected<0 || selected<pageStatus.Start || selected>pageStatus.End)
|
|
133940
133861
|
{
|
|
133941
133862
|
chart.SelectedRow=pageStatus.Start;
|
|
133942
133863
|
result.Redraw=true;
|
|
133864
|
+
result.NewIndex=pageStatus.Start;
|
|
133943
133865
|
return result;
|
|
133944
133866
|
}
|
|
133945
133867
|
|
|
133946
133868
|
var offset=this.Data.YOffset;
|
|
133947
133869
|
for(var i=0;i<step;++i)
|
|
133948
133870
|
{
|
|
133871
|
+
if (selected+1>=this.Data.Data.length && !bPageCycle)
|
|
133872
|
+
break;
|
|
133873
|
+
|
|
133949
133874
|
++selected;
|
|
133950
133875
|
if (selected>pageStatus.End) ++offset;
|
|
133951
133876
|
|
|
@@ -133961,7 +133886,7 @@ function JSReportChartContainer(uielement)
|
|
|
133961
133886
|
|
|
133962
133887
|
chart.SelectedRow=selected;
|
|
133963
133888
|
this.Data.YOffset=offset;
|
|
133964
|
-
|
|
133889
|
+
result.NewIndex=selected;
|
|
133965
133890
|
return result;
|
|
133966
133891
|
}
|
|
133967
133892
|
else if (step<0)
|
|
@@ -133970,6 +133895,7 @@ function JSReportChartContainer(uielement)
|
|
|
133970
133895
|
{
|
|
133971
133896
|
chart.SelectedRow=pageStatus.End;
|
|
133972
133897
|
result.Redraw=true;
|
|
133898
|
+
result.NewIndex=pageStatus.End;
|
|
133973
133899
|
return result;
|
|
133974
133900
|
}
|
|
133975
133901
|
|
|
@@ -133977,6 +133903,9 @@ function JSReportChartContainer(uielement)
|
|
|
133977
133903
|
var offset=this.Data.YOffset;
|
|
133978
133904
|
for(var i=0;i<step;++i)
|
|
133979
133905
|
{
|
|
133906
|
+
if (selected<=0 && !bPageCycle) //不能循环翻页
|
|
133907
|
+
break;
|
|
133908
|
+
|
|
133980
133909
|
--selected;
|
|
133981
133910
|
if (selected<pageStatus.Start) --offset;
|
|
133982
133911
|
|
|
@@ -133993,6 +133922,7 @@ function JSReportChartContainer(uielement)
|
|
|
133993
133922
|
|
|
133994
133923
|
chart.SelectedRow=selected;
|
|
133995
133924
|
this.Data.YOffset=offset;
|
|
133925
|
+
result.NewIndex=selected;
|
|
133996
133926
|
|
|
133997
133927
|
return result;
|
|
133998
133928
|
}
|
|
@@ -134001,6 +133931,36 @@ function JSReportChartContainer(uielement)
|
|
|
134001
133931
|
return null;
|
|
134002
133932
|
}
|
|
134003
133933
|
|
|
133934
|
+
this.MoveSelectedRowEvent=function(oldIndex, newIndex)
|
|
133935
|
+
{
|
|
133936
|
+
var chart=this.ChartPaint[0];
|
|
133937
|
+
if (!chart) return null;
|
|
133938
|
+
|
|
133939
|
+
if (oldIndex==newIndex) return;
|
|
133940
|
+
|
|
133941
|
+
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_MOVE_SELECTED_REPORT_ROW);
|
|
133942
|
+
if (!event || !event.Callback) return;
|
|
133943
|
+
|
|
133944
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(chart.Data.Data)) return;
|
|
133945
|
+
var arySymbol=chart.Data.Data;
|
|
133946
|
+
|
|
133947
|
+
var oldData=null, newData=null;
|
|
133948
|
+
if (oldIndex>=0 && oldIndex<arySymbol.length)
|
|
133949
|
+
{
|
|
133950
|
+
var symbol=arySymbol[oldIndex];
|
|
133951
|
+
oldData={ Symbol:symbol, Index:oldIndex };
|
|
133952
|
+
}
|
|
133953
|
+
|
|
133954
|
+
if (newIndex>=0 && newIndex<arySymbol.length)
|
|
133955
|
+
{
|
|
133956
|
+
var symbol=arySymbol[newIndex];
|
|
133957
|
+
newData={ Symbol:symbol, Index:newIndex };
|
|
133958
|
+
}
|
|
133959
|
+
|
|
133960
|
+
var endData={ Old:oldData, Now:newData };
|
|
133961
|
+
event.Callback(event, endData, this);
|
|
133962
|
+
}
|
|
133963
|
+
|
|
134004
133964
|
//左右移动
|
|
134005
133965
|
this.MoveXOffset=function(step)
|
|
134006
133966
|
{
|
|
@@ -148230,6 +148190,13 @@ function JSPopMinuteChart()
|
|
|
148230
148190
|
this.Minute.JSChart.ChangeSymbol(data.Symbol);
|
|
148231
148191
|
}
|
|
148232
148192
|
|
|
148193
|
+
if (!this.Minute.Option.EnableResize)
|
|
148194
|
+
{
|
|
148195
|
+
if (this.Minute.JSChart) this.Minute.JSChart.OnSize();
|
|
148196
|
+
}
|
|
148197
|
+
|
|
148198
|
+
|
|
148199
|
+
|
|
148233
148200
|
//超出窗口调整位置
|
|
148234
148201
|
var height=this.DivDialog.offsetHeight;
|
|
148235
148202
|
var width=this.DivDialog.offsetWidth;
|
|
@@ -148331,7 +148298,7 @@ JSPopMinuteChart.GetMinuteOption=function()
|
|
|
148331
148298
|
|
|
148332
148299
|
EnableSelectRect:true,
|
|
148333
148300
|
EnableZoomIndexWindow:true,
|
|
148334
|
-
EnableResize:
|
|
148301
|
+
EnableResize:false,
|
|
148335
148302
|
|
|
148336
148303
|
//BeforeOpen:{IsShow:true, Width:120, IsShowMultiDay:true, MulitiDayWidth:100, },
|
|
148337
148304
|
//AfterClose:{IsShow:true, Width:100, IsShowMultiDay:true, MulitiDayWidth:50, ShareVol:2 }, //ShareVol:0=盘后成交量独立坐标, 1==盘后成交量主图共用 2==盘后成交量盘前共用
|
|
@@ -148679,8 +148646,13 @@ function JSPopKeyboard()
|
|
|
148679
148646
|
JSChart:null,
|
|
148680
148647
|
}
|
|
148681
148648
|
|
|
148682
|
-
this.Inital=function()
|
|
148649
|
+
this.Inital=function(option)
|
|
148683
148650
|
{
|
|
148651
|
+
if (option)
|
|
148652
|
+
{
|
|
148653
|
+
if (IFrameSplitOperator.IsBool(option.EnableResize)) this.Keyboard.Option.EnableResize=option.EnableResize;
|
|
148654
|
+
}
|
|
148655
|
+
|
|
148684
148656
|
window.addEventListener('mousedown', (e)=>{ this.OnWindowMouseDown(e)});
|
|
148685
148657
|
}
|
|
148686
148658
|
|
|
@@ -148880,6 +148852,11 @@ function JSPopKeyboard()
|
|
|
148880
148852
|
{
|
|
148881
148853
|
if (!this.DivDialog) return;
|
|
148882
148854
|
|
|
148855
|
+
if (!this.Keyboard.Option.EnableResize) //自动调整大小
|
|
148856
|
+
{
|
|
148857
|
+
if (this.Keyboard.JSChart) this.Keyboard.JSChart.OnSize();
|
|
148858
|
+
}
|
|
148859
|
+
|
|
148883
148860
|
//显示在右下方
|
|
148884
148861
|
var height=this.DivDialog.offsetHeight;
|
|
148885
148862
|
var width=this.DivDialog.offsetWidth;
|
|
@@ -149011,7 +148988,7 @@ JSPopKeyboard.GetOption=function()
|
|
|
149011
148988
|
},
|
|
149012
148989
|
|
|
149013
148990
|
BorderLine:1|2|4|8,
|
|
149014
|
-
EnableResize:
|
|
148991
|
+
EnableResize:false,
|
|
149015
148992
|
|
|
149016
148993
|
//{ Type:列id, Title:标题, TextAlign:文字对齐方式, MaxText:文字最大宽度 , TextColor:文字颜色, Sort:0=不支持排序 1=本地排序 0=远程排序 }
|
|
149017
148994
|
Column:
|
|
@@ -153232,7 +153209,7 @@ function HQChartScriptWorker()
|
|
|
153232
153209
|
|
|
153233
153210
|
|
|
153234
153211
|
|
|
153235
|
-
var HQCHART_VERSION="1.1.
|
|
153212
|
+
var HQCHART_VERSION="1.1.14438";
|
|
153236
153213
|
|
|
153237
153214
|
function PrintHQChartVersion()
|
|
153238
153215
|
{
|