hqchart 1.1.14552 → 1.1.14555

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.
@@ -10955,16 +10955,16 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10955
10955
  {
10956
10956
  if (this.ChartSplashPaint && this.ChartSplashPaint.IsEnableSplash == true) return;
10957
10957
 
10958
+ var keyID = e.keyCode ? e.keyCode :e.which;
10959
+
10958
10960
  //回调事件
10959
10961
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_KEYDOWN);
10960
10962
  if (event && event.Callback)
10961
10963
  {
10962
- var sendData={ e:e, PreventDefault:false };
10964
+ var sendData={ e:e, KeyID:keyID, PreventDefault:false };
10963
10965
  event.Callback(event, sendData, this);
10964
10966
  if (sendData.PreventDefault) return;
10965
10967
  }
10966
-
10967
- var keyID = e.keyCode ? e.keyCode :e.which;
10968
10968
 
10969
10969
  var draw=false;
10970
10970
  if (this.ChartCorssCursor && this.ChartCorssCursor.OnKeyDown) //十字光标 隐藏显示
@@ -40056,8 +40056,7 @@ function ChartStickLine()
40056
40056
  this.Width=0; //柱子宽度 0=1 3,50=k线宽度 101=K线宽度+间距宽度
40057
40057
  this.IsHScreen=false;
40058
40058
 
40059
- this.EmptyBGColor=null; //空心柱子背景色(缓存)
40060
- this.BarCache={ }; //Type:1=线段 2=柱子
40059
+ this.BarCache={ Type:0 }; //Type:1=线段 2=柱子
40061
40060
 
40062
40061
  this.SetEmptyBar=function() //设置空心柱子
40063
40062
  {
@@ -76048,6 +76047,12 @@ function JSChartResource()
76048
76047
 
76049
76048
  TitleColor:'rgb(250,250,250)', //标题颜色
76050
76049
  TitleBGColor:"rgb(200, 66, 69)", //标题背景颜色
76050
+
76051
+ Mark:
76052
+ {
76053
+ LineColor:"rgba(255,165,0,0.6)",
76054
+ LineWidth:2,
76055
+ }
76051
76056
  }
76052
76057
 
76053
76058
  this.PopKLineChart=
@@ -77654,6 +77659,11 @@ function JSChartResource()
77654
77659
  if (item.BorderColor) dest.BorderColor=item.BorderColor;
77655
77660
  if (item.TitleColor) dest.TitleColor=item.TitleColor;
77656
77661
  if (item.TitleBGColor) dest.TitleBGColor=item.TitleBGColor;
77662
+ if (item.Mark)
77663
+ {
77664
+ if (item.Mark.LineColor) dest.Mark.LineColor=item.Mark.LineColor;
77665
+ if (IFrameSplitOperator.IsNumber(item.Mark.LineWidth)) dest.Mark.LineWidth=item.Mark.LineWidth;
77666
+ }
77657
77667
  }
77658
77668
 
77659
77669
  if (style.PopKLineChart)
@@ -81142,6 +81152,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
81142
81152
  this.ShowMinuteChartDialog=function(data, x,y)
81143
81153
  {
81144
81154
  if (!this.PopMinuteChart) return;
81155
+ if (!ChartData.IsDayPeriod(this.Period,true)) return; //只支持日K
81145
81156
  if (!data.Tooltip || !data.Chart) return;
81146
81157
 
81147
81158
  var pixelRatio=GetDevicePixelRatio();
@@ -81167,7 +81178,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
81167
81178
 
81168
81179
  if (!symbol) return;
81169
81180
 
81170
- this.PopMinuteChart.Show({ Date:date, Symbol:symbol, Data:data.Tooltip.Data }, x/pixelRatio,y/pixelRatio);
81181
+ this.PopMinuteChart.Show({ Date:date, Symbol:symbol, Data:data.Tooltip.Data, Chart:data.Tooltip.ChartPaint }, x/pixelRatio,y/pixelRatio);
81171
81182
  }
81172
81183
 
81173
81184
 
@@ -89993,17 +90004,17 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
89993
90004
 
89994
90005
  if (this.ChartSplashPaint && this.ChartSplashPaint.IsEnableSplash == true) return;
89995
90006
 
90007
+ var keyID = e.keyCode ? e.keyCode :e.which;
90008
+
89996
90009
  //回调事件
89997
90010
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_KEYDOWN);
89998
90011
  if (event && event.Callback)
89999
90012
  {
90000
- var sendData={ e:e, PreventDefault:false };
90013
+ var sendData={ e:e, KeyID:keyID, PreventDefault:false };
90001
90014
  event.Callback(event, sendData, this);
90002
90015
  if (sendData.PreventDefault) return;
90003
90016
  }
90004
90017
 
90005
- var keyID = e.keyCode ? e.keyCode :e.which;
90006
-
90007
90018
  var draw=false;
90008
90019
  if (this.ChartCorssCursor && this.ChartCorssCursor.OnKeyDown) //十字光标 隐藏显示
90009
90020
  {
@@ -129636,6 +129647,11 @@ function GetBlackStyle()
129636
129647
  {
129637
129648
  BGColor:"rgba(0,0,0,0.85)",
129638
129649
  BorderColor:"rgb(230,230,230)",
129650
+
129651
+ Mark:
129652
+ {
129653
+ LineColor:"rgba(255,215,0,0.6)",
129654
+ }
129639
129655
  },
129640
129656
 
129641
129657
  PopKLineChart:
@@ -149752,6 +149768,17 @@ function JSPopMinuteChart()
149752
149768
  Option:JSPopMinuteChart.GetMinuteOption(),
149753
149769
  JSChart:null,
149754
149770
  Date:null,
149771
+ Symbol:null,
149772
+ Name:null,
149773
+ Chart:null,
149774
+ }
149775
+
149776
+ this.ClearCache=function()
149777
+ {
149778
+ this.Minute.Date=null;
149779
+ this.Minute.Symbol=null;
149780
+ this.Minute.Name=null;
149781
+ this.Minute.Chart=null;
149755
149782
  }
149756
149783
 
149757
149784
  this.Inital=function(hqchart, option)
@@ -149765,6 +149792,11 @@ function JSPopMinuteChart()
149765
149792
  var item=CloneData(option.Option); //复制一份出来
149766
149793
  this.Minute.Option=Object.assign(this.Minute.Option,item);
149767
149794
  }
149795
+
149796
+ if (option.EnableMarkBG) //标记背景
149797
+ {
149798
+ this.HQChart.CreateExtendChart("MarkPopMinutePaint");
149799
+ }
149768
149800
  }
149769
149801
  }
149770
149802
 
@@ -149805,6 +149837,15 @@ function JSPopMinuteChart()
149805
149837
  if (this.HQChart) this.Minute.Option.Language=g_JSChartLocalization.GetLanguageName(this.HQChart.LanguageID);
149806
149838
  this.Minute.Option.OnCreatedCallback=(chart)=>{ this.OnCreateHQChart(chart); }
149807
149839
  this.Minute.Option.NetworkFilter=(data, callback)=>{ this.NetworkFilter(data, callback); }
149840
+
149841
+ this.Minute.Option.EventCallback=
149842
+ [
149843
+ {
149844
+ event:JSCHART_EVENT_ID.ON_KEYDOWN, //键盘消息
149845
+ callback:(event, data, obj)=>{ this.OnKeyDown(event, data, obj); }
149846
+ },
149847
+ ];
149848
+
149808
149849
  chart.SetOption(this.Minute.Option); //设置K线配置
149809
149850
 
149810
149851
  document.body.appendChild(divDom);
@@ -149865,14 +149906,16 @@ function JSPopMinuteChart()
149865
149906
  if (!data.Symbol || !IFrameSplitOperator.IsPlusNumber(data.Date)) return;
149866
149907
 
149867
149908
  this.Date=data.Date;
149868
- var name=data.Symbol;
149869
- if (data.Name) name=data.Name;
149870
- var title=`${name} ${IFrameSplitOperator.FormatDateString(data.Date)} 分时图`
149871
- this.TitleBox.DivName.innerText=title;
149909
+ this.Symbol=this.Name=data.Symbol;
149910
+ if (data.Name) this.Name=data.Name;
149911
+ this.Chart=data.Chart;
149912
+
149913
+ this.UpdateDialogTitle();
149872
149914
 
149873
149915
  if (this.Minute.JSChart)
149874
149916
  {
149875
- this.Minute.JSChart.ChangeSymbol(data.Symbol);
149917
+ this.Minute.JSChart.ChangeSymbol(this.Symbol);
149918
+ this.MarkKLineBG();
149876
149919
  }
149877
149920
 
149878
149921
  if (!this.Minute.Option.EnableResize)
@@ -149895,11 +149938,19 @@ function JSPopMinuteChart()
149895
149938
  this.DivDialog.style.left = x + "px";
149896
149939
  }
149897
149940
 
149941
+ this.UpdateDialogTitle=function()
149942
+ {
149943
+ var title=`${this.Name} ${IFrameSplitOperator.FormatDateString(this.Date)} 分时图 PageUp/PageDown翻页`;
149944
+ this.TitleBox.DivName.innerText=title;
149945
+ }
149946
+
149898
149947
  this.Close=function(e)
149899
149948
  {
149900
149949
  if (!this.DivDialog) return;
149901
149950
 
149951
+ this.ClearCache();
149902
149952
  this.DivDialog.style.visibility='hidden';
149953
+ this.ClearMarkKLineBG();
149903
149954
  }
149904
149955
 
149905
149956
  this.OnMouseDownTitle=function(e)
@@ -149961,6 +150012,114 @@ function JSPopMinuteChart()
149961
150012
 
149962
150013
  if (this.Minute.JSChart) this.Minute.JSChart.SetLanguage(language);
149963
150014
  }
150015
+
150016
+
150017
+ this.OnKeyDown=function(event, data, obj)
150018
+ {
150019
+ switch(data.KeyID)
150020
+ {
150021
+ case 33: //page up
150022
+ data.PreventDefault=true;
150023
+ var date=this.GetNextDate(1);
150024
+ if (IFrameSplitOperator.IsPlusNumber(date)) this.ChangeDate(date);
150025
+ break;
150026
+ case 34: //page down
150027
+ data.PreventDefault=true;
150028
+ var date=this.GetNextDate(-1);
150029
+ if (IFrameSplitOperator.IsPlusNumber(date)) this.ChangeDate(date);
150030
+ break;
150031
+ default:
150032
+ return;
150033
+ }
150034
+ }
150035
+
150036
+ this.GetNextDate=function(step)
150037
+ {
150038
+ if (!this.Chart) return null;
150039
+ if (!IFrameSplitOperator.IsNumber(this.Date)) return null;
150040
+ if (step==0) return null;
150041
+
150042
+ var kData=this.Chart.Data;
150043
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return null;
150044
+
150045
+ var index=-1;
150046
+ for(var i=0;i<kData.Data.length;++i)
150047
+ {
150048
+ var kItem=kData.Data[i];
150049
+ if (!kItem) continue;
150050
+
150051
+ if (kItem.Date==this.Date)
150052
+ {
150053
+ index=i;
150054
+ break;
150055
+ }
150056
+ }
150057
+
150058
+ if (index<0) return null;
150059
+
150060
+ var date=null;
150061
+ if (step>0)
150062
+ {
150063
+ for(var i=1, j=0;j<step && index+i<kData.Data.length;++i)
150064
+ {
150065
+ var kItem=kData.Data[index+i];
150066
+ if (!kItem || !IFrameSplitOperator.IsNumber(kItem.Date)) continue;
150067
+
150068
+ date=kItem.Date;
150069
+ ++j;
150070
+ }
150071
+ }
150072
+ else
150073
+ {
150074
+ step=Math.abs(step);
150075
+ for(var i=1, j=0;j<step && index-i>=0;++i)
150076
+ {
150077
+ var kItem=kData.Data[index-i];
150078
+ if (!kItem || !IFrameSplitOperator.IsNumber(kItem.Date)) continue;
150079
+
150080
+ date=kItem.Date;
150081
+ ++j;
150082
+ }
150083
+ }
150084
+
150085
+ if (date==this.Date) return null;
150086
+
150087
+ return date;
150088
+ }
150089
+
150090
+ //修改日期
150091
+ this.ChangeDate=function(date)
150092
+ {
150093
+ if (!this.Minute.JSChart) return;
150094
+
150095
+ this.Date=date;
150096
+ this.UpdateDialogTitle();
150097
+ this.Minute.JSChart.ChangeSymbol(this.Symbol);
150098
+ this.MarkKLineBG();
150099
+ }
150100
+
150101
+ this.MarkKLineBG=function()
150102
+ {
150103
+ if (!this.HQChart) return;
150104
+
150105
+ var finder=this.HQChart.GetExtendChartByClassName("MarkPopMinutePaint");
150106
+ if (!finder || !finder.Chart) return;
150107
+
150108
+ finder.Chart.SetDate([this.Date]);
150109
+ this.HQChart.Draw();
150110
+
150111
+ }
150112
+
150113
+ this.ClearMarkKLineBG=function()
150114
+ {
150115
+ if (!this.HQChart) return;
150116
+
150117
+ var finder=this.HQChart.GetExtendChartByClassName("MarkPopMinutePaint");
150118
+ if (!finder || !finder.Chart) return;
150119
+
150120
+ finder.Chart.ClearData();
150121
+ this.HQChart.Draw();
150122
+ }
149964
150123
  }
149965
150124
 
149966
150125
 
@@ -150292,6 +150451,118 @@ JSTooltipMinuteChart.GetMinuteOption=function()
150292
150451
  }
150293
150452
 
150294
150453
 
150454
+ ///////////////////////////////////////////////////////
150455
+ // K线上标记选中
150456
+
150457
+ function MarkPopMinutePaint()
150458
+ {
150459
+ this.newMethod=IExtendChartPainting; //派生
150460
+ this.newMethod();
150461
+ delete this.newMethod;
150462
+
150463
+ this.ClassName="MarkPopMinutePaint";
150464
+ this.MapDate; //标记日期
150465
+ this.BGColor="rgba(100,100,100,0.2)";
150466
+ this.LineWidth=g_JSChartResource.PopMinuteChart.Mark.LineWidth;
150467
+ this.LineColor=g_JSChartResource.PopMinuteChart.Mark.LineColor;
150468
+ this.SubFrame;
150469
+ this.IsDynamic=true;
150470
+
150471
+
150472
+ this.ReloadResource=function(resource)
150473
+ {
150474
+ this.LineWidth=g_JSChartResource.PopMinuteChart.Mark.LineWidth;
150475
+ this.LineColor=g_JSChartResource.PopMinuteChart.Mark.LineColor;
150476
+ }
150477
+
150478
+ this.SetDate=function(aryDate)
150479
+ {
150480
+ this.MapDate=new Map();
150481
+ if (IFrameSplitOperator.IsNonEmptyArray(aryDate))
150482
+ {
150483
+ for(var i=0;i<aryDate.length;++i)
150484
+ {
150485
+ var date=aryDate[i];
150486
+ this.MapDate.set(date, { Date:date} );
150487
+ }
150488
+ }
150489
+ }
150490
+
150491
+ this.ClearData=function()
150492
+ {
150493
+ this.MapDate=null;
150494
+ }
150495
+
150496
+ this.Draw=function()
150497
+ {
150498
+ this.SubFrame=null;
150499
+ if (!this.HQChart) return;
150500
+ if (!this.ChartFrame || !IFrameSplitOperator.IsNonEmptyArray(this.ChartFrame.SubFrame)) return;
150501
+ if (!this.MapDate || this.MapDate.size<=0) return;
150502
+
150503
+ var kData=this.HQChart.GetKData();
150504
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return;
150505
+ this.SubFrame=this.ChartFrame.SubFrame[0].Frame;
150506
+ if (!this.SubFrame) return;
150507
+
150508
+ var dataWidth=this.SubFrame.DataWidth;
150509
+ var distanceWidth=this.SubFrame.DistanceWidth;
150510
+ var xPointCount=this.SubFrame.XPointCount;
150511
+ var border=this.SubFrame.GetBorder();
150512
+ var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
150513
+ var chartright=border.RightEx;
150514
+
150515
+ var startIndex=kData.DataOffset;
150516
+ var aryBG=[];
150517
+ for(var i=startIndex,j=0;i<kData.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
150518
+ {
150519
+ var kItem=kData.Data[i];
150520
+ if (!kItem) continue;
150521
+ if (!this.MapDate.has(kItem.Date)) continue
150522
+
150523
+ var left=xOffset;
150524
+ var right=xOffset+dataWidth;
150525
+ var x=left+(right-left)/2;
150526
+
150527
+ var bgItem={ Left:left, XCenter:x, Right:right, DataIndex:i, DataWidth:dataWidth };
150528
+ aryBG.push(bgItem);
150529
+ }
150530
+
150531
+ if (IFrameSplitOperator.IsNonEmptyArray(aryBG))
150532
+ {
150533
+ this.Canvas.save();
150534
+ this.DrawBG(aryBG);
150535
+ this.Canvas.restore();
150536
+ }
150537
+
150538
+ this.SubFrame=null;
150539
+ }
150540
+
150541
+ this.DrawBG=function(aryBG)
150542
+ {
150543
+ var border=this.ChartFrame.ChartBorder.GetBorder();
150544
+ var pixelRatio=GetDevicePixelRatio();
150545
+ if (this.MapDate.size==1) //标记一天
150546
+ {
150547
+ var item=aryBG[0];
150548
+ var lineWidth=this.LineWidth*pixelRatio;
150549
+ if (item.DataWidth<=4) lineWidth=1*pixelRatio;
150550
+
150551
+ this.Canvas.lineWidth=lineWidth;
150552
+ this.Canvas.strokeStyle=this.LineColor;
150553
+ this.Canvas.beginPath();
150554
+ this.Canvas.moveTo(item.XCenter,border.TopEx);
150555
+ this.Canvas.lineTo(item.XCenter,border.BottomEx);
150556
+ this.Canvas.stroke();
150557
+ }
150558
+ }
150559
+ }
150560
+
150561
+
150562
+ JSChart.RegisterExtendChartClass("MarkPopMinutePaint", { Create:function() { return new MarkPopMinutePaint}} );
150563
+
150564
+
150565
+
150295
150566
 
150296
150567
 
150297
150568
 
@@ -155196,7 +155467,7 @@ function HQChartScriptWorker()
155196
155467
 
155197
155468
 
155198
155469
 
155199
- var HQCHART_VERSION="1.1.14551";
155470
+ var HQCHART_VERSION="1.1.14554";
155200
155471
 
155201
155472
  function PrintHQChartVersion()
155202
155473
  {