hqchart 1.1.15039 → 1.1.15046

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.
@@ -4562,7 +4562,13 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4562
4562
 
4563
4563
  if (option.DrawTool) //画图工具
4564
4564
  {
4565
- if (option.DrawTool.StorageKey && chart.ChartDrawStorage) chart.ChartDrawStorage.Load(option.DrawTool.StorageKey);
4565
+ var item=option.DrawTool;
4566
+ if (chart.ChartDrawStorage)
4567
+ {
4568
+ if (item.StorageKey) chart.ChartDrawStorage.Load(item.StorageKey);
4569
+ if (IFrameSplitOperator.IsBool(item.EnableCrossPeriod)) chart.ChartDrawStorage.EnableCrossPeriod=item.EnableCrossPeriod;
4570
+ }
4571
+
4566
4572
  }
4567
4573
 
4568
4574
  if (option.KeyboardMove)
@@ -14166,6 +14172,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
14166
14172
 
14167
14173
  drawPicture.PointMagnetKLine();
14168
14174
  drawPicture.Status=10; //完成
14175
+ drawPicture.Period=this.Period;
14169
14176
  drawPicture.PointToValue();
14170
14177
 
14171
14178
  if (this.ChartDrawStorage) this.ChartDrawStorage.SaveDrawData(drawPicture);
@@ -68770,10 +68777,89 @@ function IChartDrawPicture()
68770
68777
  }
68771
68778
  }
68772
68779
 
68773
- this.UpdateXValue=function() //通过datetime更新x的索引
68780
+ this.GetkData=function()
68774
68781
  {
68775
- if (!this.Frame) return false;
68782
+ if (!this.Frame) return null;
68776
68783
  var data=this.Frame.Data;
68784
+ if (!data) return null;
68785
+
68786
+ return data;
68787
+ }
68788
+
68789
+ //周期变动 X重新定位
68790
+ this.ChangePeriod=function(period)
68791
+ {
68792
+ var kData=this.GetkData();
68793
+ if (!kData) return;
68794
+
68795
+ var aryDateTime=[];
68796
+ for(var i=0; i<this.Value.length; ++i)
68797
+ {
68798
+ var item=this.Value[i];
68799
+ if (!item.DateTime) break;
68800
+ var dateTime={ Date:item.DateTime.Date, Time:0, Match:null };
68801
+ if (IFrameSplitOperator.IsNumber(item.DateTime.Time)) dateTime.Time=item.DateTime.Time;
68802
+ aryDateTime[i]=dateTime;
68803
+ }
68804
+
68805
+ var findCount=0;
68806
+ var perData=null;
68807
+ var perIndex=-1;
68808
+ for(var i=0, j=0;i<kData.Data.length;++i)
68809
+ {
68810
+ var kItem=kData.Data[i];
68811
+
68812
+ for(j=0;j<aryDateTime.length;++j)
68813
+ {
68814
+ var item=aryDateTime[j];
68815
+ if (item.Match) continue;
68816
+
68817
+ if (ChartData.IsDayPeriod(period, true))
68818
+ {
68819
+ if (kItem.Date>item.Date)
68820
+ {
68821
+ item.Match={ KItem:perData, Index:perIndex };
68822
+ ++findCount;
68823
+ }
68824
+ }
68825
+ else if (ChartData.IsMinutePeriod(period, true))
68826
+ {
68827
+ if (kItem.Date>item.Date || (kItem.Date==item.Date && kItem.Time>item.Time))
68828
+ {
68829
+ item.Match={ KItem:perData, Index:perIndex };
68830
+ ++findCount;
68831
+ }
68832
+ }
68833
+ }
68834
+
68835
+ perData=kItem;
68836
+ perIndex=i;
68837
+
68838
+ if (findCount>=aryDateTime.length) break;
68839
+ }
68840
+
68841
+ for(var i=0;i<aryDateTime.length;++i)
68842
+ {
68843
+ var item=aryDateTime[i];
68844
+ var valueItem=this.Value[i];
68845
+ if (item.Match && item.Match.KItem)
68846
+ {
68847
+ valueItem.DateTime={ Date:item.Match.Date, Time:item.Match.Time };
68848
+ valueItem.XValue=item.Match.Index;
68849
+ }
68850
+ else
68851
+ {
68852
+ valueItem.DateTime=null;
68853
+ valueItem.XValue=null;
68854
+ }
68855
+ }
68856
+
68857
+ this.Period=period;
68858
+ }
68859
+
68860
+ this.UpdateXValue=function() //通过datetime更新x的索引
68861
+ {
68862
+ var data=this.GetkData();
68777
68863
  if (!data) return false;
68778
68864
 
68779
68865
  var aryDateTime=[];
@@ -80483,9 +80569,12 @@ function ChartDrawTVShortPosition()
80483
80569
 
80484
80570
  function ChartDrawStorage()
80485
80571
  {
80486
- this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{Guid, Symbol, Period, ClassName, Value}
80572
+ //this.DrawData=new Map(); //画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{ Guid, Symbol, Period, ClassName, Value }
80573
+ this.DrawDataV2=new Map(); //画图工具数据 key=symbol, value=Map() Key:Guid, Value:{ Guid, Symbol, Period, ClassName, Value }
80574
+
80487
80575
  this.StorageKey;
80488
- this.GetEventCallback; //事件回调
80576
+ this.GetEventCallback; //事件回调
80577
+ this.EnableCrossPeriod=false; //跨周期
80489
80578
 
80490
80579
  this.Load=function(key) //从本地读取画图工具
80491
80580
  {
@@ -80498,18 +80587,39 @@ function ChartDrawStorage()
80498
80587
  if (typeof(cacheValue) != "string") return;
80499
80588
 
80500
80589
  var saveData=JSON.parse(cacheValue);
80501
- for(var i in saveData)
80502
- {
80503
- var item=saveData[i];
80504
- var drawMap=new Map();
80590
+ if (!saveData) return;
80505
80591
 
80506
- for(var j in item.Value)
80592
+ if (IFrameSplitOperator.IsNonEmptyArray(saveData)) //老版本 key=symbol-Period
80593
+ {
80594
+ for(var i=0;i<saveData.length;++i)
80507
80595
  {
80508
- var drawItem=item.Value[j];
80509
- drawMap.set(drawItem.Key, drawItem.Value);
80596
+ var item=saveData[i];
80597
+ for(var j=0;j<item.Value.length;++j)
80598
+ {
80599
+ var drawItem=item.Value[j];
80600
+ var symbol=drawItem.Value.Symbol;
80601
+ if (!this.DrawDataV2.has(symbol))
80602
+ this.DrawDataV2.set(symbol, {Symbol:symbol, MapPicture: new Map() });
80603
+
80604
+ var stockItem=this.DrawDataV2.get(symbol);
80605
+ stockItem.MapPicture.set(drawItem.Value.Guid, drawItem.Value);
80606
+ }
80510
80607
  }
80608
+ }
80609
+ else if (saveData.Ver==2.0 && IFrameSplitOperator.IsNonEmptyArray(saveData.Data))
80610
+ {
80611
+ for(var i=0;i<saveData.Data.length;++i)
80612
+ {
80613
+ var item=saveData.Data[i]; //{ Symbol:, AryPicture:[ { Guid, Symbol, Period, ClassName, Value }, ] }
80614
+ var stockItem={ Symbol:item.Symbol, MapPicture:new Map() };
80615
+ for(var j=0; j<item.AryPicture.length;++j)
80616
+ {
80617
+ var drawItem=item.AryPicture[j];
80618
+ stockItem.MapPicture.set(drawItem.Guid, drawItem);
80619
+ }
80511
80620
 
80512
- this.DrawData.set(item.Key,drawMap);
80621
+ this.DrawDataV2.set(stockItem.Symbol,stockItem);
80622
+ }
80513
80623
  }
80514
80624
  }
80515
80625
 
@@ -80518,89 +80628,95 @@ function ChartDrawStorage()
80518
80628
  if (!this.StorageKey) return;
80519
80629
 
80520
80630
  var saveData=[];
80521
- for(var stock of this.DrawData)
80631
+ for(var mapItem of this.DrawDataV2)
80522
80632
  {
80523
- var key=stock[0];
80524
- var value=stock[1];
80525
- var itemData={ Key:key, Value:[]};
80633
+ var symbol=mapItem[0];
80634
+ var stockItem=mapItem[1];
80635
+
80636
+ var itemData={ Symbol:symbol, AryPicture:[] };
80526
80637
 
80527
- for(var drawItem of value)
80638
+ for(var pictureItem of stockItem.MapPicture)
80528
80639
  {
80529
- if (drawItem[1] && drawItem[1].EnableSave===false) continue;
80640
+ var drawItem=pictureItem[1];
80641
+ if (drawItem.EnableSave===false) continue;
80530
80642
 
80531
- itemData.Value.push({Key:drawItem[0], Value:drawItem[1]});
80643
+ itemData.AryPicture.push(drawItem);
80532
80644
  }
80533
80645
 
80534
- if (IFrameSplitOperator.IsNonEmptyArray(itemData.Value))
80646
+ if (IFrameSplitOperator.IsNonEmptyArray(itemData.AryPicture))
80535
80647
  saveData.push(itemData);
80536
80648
  }
80537
80649
 
80538
80650
  JSConsole.Chart.Log(`[ChartDrawStorage::Save] save to localStorage, key=${this.StorageKey}`);
80539
- var strData=JSON.stringify(saveData);
80651
+ var strData=JSON.stringify({Ver:2.0, Data:saveData});
80540
80652
  localStorage[this.StorageKey]=strData;
80541
80653
  }
80542
80654
 
80543
- this.GetItemKey=function(obj) //生成每个画图工具的key
80544
- {
80545
- var strKey=`${obj.Symbol}-${obj.Period}`;
80546
- return strKey;
80547
- }
80548
-
80549
80655
  this.SaveDrawData=function(drawPicture) //保存一个画图工具
80550
80656
  {
80551
- var strKey=this.GetItemKey(drawPicture);
80657
+ var symbol=drawPicture.Symbol;
80552
80658
  var data=drawPicture.ExportStorageData();
80553
80659
  if (!data) return;
80554
80660
 
80555
- if (this.DrawData.has(strKey)) //更新
80661
+ if (this.DrawDataV2.has(symbol)) //更新
80556
80662
  {
80557
- JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Upate: key, drawPicture, data', strKey, drawPicture,data);
80558
- this.DrawData.get(strKey).set(data.Guid, data);
80663
+ JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Upate: symbol, drawPicture, data', symbol, drawPicture, data);
80664
+ var stockItem=this.DrawDataV2.get(symbol);
80665
+ stockItem.MapPicture.set(data.Guid, data);
80559
80666
  }
80560
80667
  else //新增
80561
80668
  {
80562
- JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Insert: key, drawPicture, data', strKey, drawPicture,data);
80563
- var newData=new Map();
80564
- newData.set(data.Guid, data);
80565
- this.DrawData.set(strKey,newData);
80669
+ JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] Insert: symbol, drawPicture, data', symbol, drawPicture,data);
80670
+ var stockItem={ Symbol:symbol, MapPicture:new Map() } ;
80671
+ stockItem.set(data.Guid, data);
80672
+ this.DrawDataV2.set(symbol,newData);
80566
80673
  }
80567
80674
 
80568
- JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] All draw data: ', this.DrawData);
80675
+ JSConsole.Chart.Log('[ChartDrawStorage::SaveDrawData] All draw data: ', this.DrawDataV2);
80569
80676
 
80570
80677
  this.Save();
80571
80678
  }
80572
80679
 
80573
80680
  this.DeleteDrawData=function(drawPicture) //删除一个画图工具
80574
80681
  {
80575
- var strKey=this.GetItemKey(drawPicture);
80576
- if (!this.DrawData.has(strKey)) return;
80682
+ var symbol=drawPicture.Symbol;
80683
+ if (!this.DrawDataV2.has(symbol)) return;
80577
80684
 
80578
- var mapDraw=this.DrawData.get(strKey);
80579
- if (!mapDraw.has(drawPicture.Guid)) return;
80685
+ var stockItem=this.DrawDataV2.get(symbol);
80686
+ if (!stockItem.MapPicture.has(drawPicture.Guid)) return;
80580
80687
 
80581
- mapDraw.delete(drawPicture.Guid);
80688
+ stockItem.MapPicture.delete(drawPicture.Guid);
80582
80689
  this.Save();
80583
80690
  }
80584
80691
 
80585
80692
  this.Clear=function()
80586
80693
  {
80587
- this.DrawData=new Map();
80694
+ this.DrawDataV2=new Map();
80588
80695
  this.Save();
80589
80696
  }
80590
80697
 
80591
- this.GetDrawData=function(obj) //获取已有的画图工具数据{Symbol: , Period:, }
80698
+ this.GetDrawData=function(obj) //获取已有的画图工具数据{ Symbol: , Period:, }
80592
80699
  {
80593
- var data=[];
80594
- var strKey=this.GetItemKey(obj);
80595
- if (!this.DrawData.has(strKey)) return data;
80700
+ var aryData=[];
80701
+ var symbol=obj.Symbol;
80702
+
80703
+ if (!this.DrawDataV2.has(symbol)) return aryData;
80596
80704
 
80597
- var stockData=this.DrawData.get(strKey);
80598
- for(var item of stockData)
80705
+ var stockItem=this.DrawDataV2.get(symbol);
80706
+ for(var mapItem of stockItem.MapPicture)
80599
80707
  {
80600
- data.push(item[1]);
80708
+ var drawItem=mapItem[1];
80709
+ if (this.EnableCrossPeriod)
80710
+ {
80711
+ aryData.push(drawItem);
80712
+ }
80713
+ else
80714
+ {
80715
+ if (drawItem.Period==obj.Period) aryData.push(drawItem);
80716
+ }
80601
80717
  }
80602
80718
 
80603
- return data;
80719
+ return aryData;
80604
80720
  }
80605
80721
  }
80606
80722
 
@@ -91921,7 +92037,16 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
91921
92037
  drawPicture.Option=this.ChartDrawOption;
91922
92038
 
91923
92039
  if (drawPicture.ImportStorageData) drawPicture.ImportStorageData(item);
91924
- drawPicture.UpdateXValue();
92040
+ if (drawPicture.Period!=this.Period)
92041
+ {
92042
+ drawPicture.ChangePeriod(this.Period);
92043
+ }
92044
+ else
92045
+ {
92046
+ drawPicture.UpdateXValue();
92047
+ }
92048
+
92049
+
91925
92050
  drawPicture.ValueToPoint();
91926
92051
 
91927
92052
  var self=this;
@@ -99719,7 +99844,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
99719
99844
  {
99720
99845
  if (!this.ChartDrawStorageCache || this.ChartDrawStorageCache.length<=0) return;
99721
99846
 
99722
- var self=this;
99847
+ var kData=this.GetKData();
99723
99848
  for(var i=0; i<this.ChartDrawStorageCache.length; ++i)
99724
99849
  {
99725
99850
  var item=this.ChartDrawStorageCache[i];
@@ -156932,6 +157057,8 @@ var JS_DRAWTOOL_MENU_ID=
156932
157057
  CMD_ZOOM_OUT_FONT_ID:12, //字体缩小
156933
157058
  CMD_MODIFY_TEXT_ID:13, //随机生成文字内容
156934
157059
  CMD_ADVANCED_SETTING_ID:14, //高级设置
157060
+
157061
+ CMD_CROSS_PERIOD_ID:15, //跨周期
156935
157062
  };
156936
157063
 
156937
157064
  function JSDialogDrawTool()
@@ -157054,6 +157181,7 @@ function JSDialogDrawTool()
157054
157181
  AryTool:
157055
157182
  [
157056
157183
  { Title:"选中", ClassName:'hqchart_drawtool icon-arrow', Type:1, Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_SELECTED_ID} },
157184
+ { Title:"跨周期", ClassName: 'hqchart_drawtool icon-kuazhouqi', Type:2, Data:{ ID:JS_DRAWTOOL_MENU_ID.CMD_CROSS_PERIOD_ID }},
157057
157185
  { Title:'尺子', ClassName: 'hqchart_drawtool icon-ruler', Type:0, Data:{ ID:"尺子" } },
157058
157186
  { Title:"磁铁", ClassName:'hqchart_drawtool icon-xifu', Type:2, Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_ENABLE_MAGNET_ID} },
157059
157187
  { Title:"点击切换颜色", ClassName: 'hqchart_drawtool icon-fangkuai', Type:2, Data:{ ID:JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID }},
@@ -157213,12 +157341,15 @@ function JSDialogDrawTool()
157213
157341
  this.ClearCurrnetDrawPicture();
157214
157342
  this.EnableEraseChart(false);
157215
157343
  }
157344
+ else if (type==2 && id==JS_DRAWTOOL_MENU_ID.CMD_CROSS_PERIOD_ID)
157345
+ {
157346
+ this.EnableCrossPeriod(data);
157347
+ }
157216
157348
  else if (type==2 && id==JS_DRAWTOOL_MENU_ID.CMD_ENABLE_MAGNET_ID)
157217
157349
  {
157218
157350
  this.ChangeMagnet(data);
157219
157351
  }
157220
157352
  else if (type==0)
157221
-
157222
157353
  {
157223
157354
  this.ClearAllSelectedChart();
157224
157355
  this.EnableEraseChart(false);
@@ -157241,6 +157372,26 @@ function JSDialogDrawTool()
157241
157372
  }
157242
157373
  }
157243
157374
 
157375
+ this.EnableCrossPeriod=function(data)
157376
+ {
157377
+ if (!this.HQChart) return;
157378
+ if (!this.HQChart.ChartDrawStorage) return;
157379
+
157380
+ this.HQChart.ChartDrawStorage.EnableCrossPeriod=!this.HQChart.ChartDrawStorage.EnableCrossPeriod;
157381
+ var enable=this.HQChart.ChartDrawStorage.EnableCrossPeriod;
157382
+
157383
+ if (enable)
157384
+ {
157385
+ data.Span.classList.remove("UMyChart_DrawTool_Span");
157386
+ data.Span.classList.add("UMyChart_DrawTool_Span_Selected");
157387
+ }
157388
+ else
157389
+ {
157390
+ data.Span.classList.remove("UMyChart_DrawTool_Span_Selected");
157391
+ data.Span.classList.add("UMyChart_DrawTool_Span");
157392
+ }
157393
+ }
157394
+
157244
157395
  this.CreateToolGroup=function(tbody)
157245
157396
  {
157246
157397
  var trDom=document.createElement("tr");
@@ -157286,6 +157437,14 @@ function JSDialogDrawTool()
157286
157437
  {
157287
157438
  spanDom.style['color']=this.LineColor;
157288
157439
  }
157440
+ else if (item.Type==2 && item.Data.ID==JS_DRAWTOOL_MENU_ID.CMD_CROSS_PERIOD_ID)
157441
+ {
157442
+ if (this.HQChart && this.HQChart.ChartDrawStorage && this.HQChart.ChartDrawStorage.EnableCrossPeriod)
157443
+ {
157444
+ data.Span.classList.remove("UMyChart_DrawTool_Span");
157445
+ data.Span.classList.add("UMyChart_DrawTool_Span_Selected");
157446
+ }
157447
+ }
157289
157448
 
157290
157449
  tdDom.onmousedown=(e)=> { this.OnClickItem(e, data); }; //点击
157291
157450
 
@@ -165017,7 +165176,7 @@ function HQChartScriptWorker()
165017
165176
 
165018
165177
 
165019
165178
 
165020
- var HQCHART_VERSION="1.1.15038";
165179
+ var HQCHART_VERSION="1.1.15045";
165021
165180
 
165022
165181
  function PrintHQChartVersion()
165023
165182
  {