hqchart 1.1.15084 → 1.1.15089

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.15084",
3
+ "version": "1.1.15089",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -564,8 +564,6 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
564
564
  if (IFrameSplitOperator.IsNumber(subItem.Formula)) chart.ChartCorssCursor.StringFormatX.RangeIncrease.Formula=subItem.Formula;
565
565
 
566
566
  }
567
-
568
-
569
567
  }
570
568
 
571
569
  //保存十字光标文字高度
@@ -584,8 +582,11 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
584
582
  {
585
583
  var item=option.Frame[i];
586
584
  if (!chart.Frame.SubFrame[i]) continue;
587
- var subFrame=chart.Frame.SubFrame[i].Frame;
588
585
 
586
+ chart.SetSubFrameAttribute(chart.Frame.SubFrame[i], null, item);
587
+
588
+ /* 窗口设置全部移动到 SetSubFrameAttribute
589
+ var subFrame=chart.Frame.SubFrame[i].Frame;
589
590
  if (IFrameSplitOperator.IsNumber(item.SplitCount)) chart.Frame.SubFrame[i].Frame.YSplitOperator.SplitCount=item.SplitCount;
590
591
  if (item.StringFormat) chart.Frame.SubFrame[i].Frame.YSplitOperator.StringFormat=item.StringFormat;
591
592
  if (IFrameSplitOperator.IsNumber(item.FloatPrecision)) chart.Frame.SubFrame[i].Frame.YSplitOperator.FloatPrecision=item.FloatPrecision;
@@ -631,6 +632,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
631
632
  if (IFrameSplitOperator.IsBool(item.IsShowNameArrow)) chart.Frame.SubFrame[i].Frame.IsShowNameArrow=item.IsShowNameArrow;
632
633
 
633
634
  if (item.ClientBGColor) subFrame.ClientBGColor=item.ClientBGColor;
635
+ */
634
636
  }
635
637
  }
636
638
 
@@ -763,6 +765,9 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
763
765
 
764
766
  }
765
767
 
768
+ chart.SetSubFrameAttribute(chart.Frame.SubFrame[i],item, null)
769
+
770
+ /* 窗口设置全部移动到 SetSubFrameAttribute
766
771
  var frame=chart.Frame.SubFrame[i].Frame;
767
772
  if (IFrameSplitOperator.IsBool(item.Modify)) frame.ModifyIndex=item.Modify;
768
773
  if (IFrameSplitOperator.IsBool(item.Change)) frame.ChangeIndex=item.Change;
@@ -792,6 +797,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
792
797
  if (IFrameSplitOperator.IsNumber(item.OverlayIndexType.Position)) chart.Frame.SubFrame[i].Frame.OverlayIndexType.Position=item.OverlayIndexType.Position;
793
798
  if (IFrameSplitOperator.IsNumber(item.OverlayIndexType.LineSpace)) chart.Frame.SubFrame[i].Frame.OverlayIndexType.LineSpace=item.OverlayIndexType.LineSpace;
794
799
  }
800
+ */
795
801
  }
796
802
 
797
803
  //叠加指标宽度
@@ -1147,6 +1153,10 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
1147
1153
  {
1148
1154
  var item=option.Frame[i];
1149
1155
  if (!chart.Frame.SubFrame[i]) continue;
1156
+
1157
+ chart.SetSubFrameAttribute(chart.Frame.SubFrame[i],null,item);
1158
+
1159
+ /*
1150
1160
  var subFrame=chart.Frame.SubFrame[i].Frame;
1151
1161
 
1152
1162
  if (IFrameSplitOperator.IsNumber(item.SplitCount)) chart.Frame.SubFrame[i].Frame.YSplitOperator.SplitCount=item.SplitCount;
@@ -1204,6 +1214,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
1204
1214
  if (subItem.Percentage && IFrameSplitOperator.IsNumber(subItem.Percentage.Dec)) subFrame.YSplitOperator.RightTextConfig.Percentage.Dec=subItem.Percentage.Dec;
1205
1215
  }
1206
1216
  }
1217
+ */
1207
1218
  }
1208
1219
 
1209
1220
  chart.UpdateXShowText();
@@ -1319,6 +1330,9 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
1319
1330
  }
1320
1331
  }
1321
1332
 
1333
+ chart.SetSubFrameAttribute(chart.Frame.SubFrame[index],item, null);
1334
+
1335
+ /*
1322
1336
  var frame=chart.Frame.SubFrame[index].Frame;
1323
1337
  if (IFrameSplitOperator.IsBool(item.Modify)) frame.ModifyIndex=item.Modify;
1324
1338
  if (IFrameSplitOperator.IsBool(item.Change)) frame.ChangeIndex=item.Change;
@@ -1341,6 +1355,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
1341
1355
  if (item.IsShowIndexName==false) chart.Frame.SubFrame[index].Frame.IsShowIndexName=false;
1342
1356
  if (item.IsShowOverlayIndexName==false) chart.Frame.SubFrame[index].Frame.IsShowOverlayIndexName=false;
1343
1357
  if (!IFrameSplitOperator.IsUndefined(item.HorizontalReserved)) frame.HorizontalReserved=item.HorizontalReserved;
1358
+ */
1344
1359
  }
1345
1360
  }
1346
1361
 
@@ -10319,10 +10334,14 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10319
10334
  if (IFrameSplitOperator.IsBool(windowItem.Change)) frame.ChangeIndex=windowItem.Change;
10320
10335
  if (IFrameSplitOperator.IsBool(windowItem.Close)) frame.CloseIndex=windowItem.Close;
10321
10336
  if (IFrameSplitOperator.IsBool(windowItem.Overlay)) frame.OverlayIndex=windowItem.Overlay;
10337
+ if (IFrameSplitOperator.IsBool(windowItem.Export)) frame.ExportData=windowItem.Export;
10338
+ if (IFrameSplitOperator.IsBool(windowItem.MaxMin)) frame.MaxMinWindow=windowItem.MaxMin;
10339
+ if (IFrameSplitOperator.IsBool(windowItem.TitleWindow)) frame.TitleWindow=windowItem.TitleWindow;
10322
10340
  if (IFrameSplitOperator.IsBool(windowItem.AddIndexWindow)) frame.AddIndexWindow=windowItem.AddIndexWindow;
10323
10341
  if (IFrameSplitOperator.IsBool(windowItem.IndexHelp)) frame.IndexHelp=windowItem.IndexHelp;
10324
10342
 
10325
10343
  if (IFrameSplitOperator.IsBool(windowItem.IsDrawTitleBG)) frame.IsDrawTitleBG=windowItem.IsDrawTitleBG;
10344
+ if (IFrameSplitOperator.IsBool(windowItem.IsShowNameArrow)) frame.IsShowNameArrow=windowItem.IsShowNameArrow;
10326
10345
 
10327
10346
  if (IFrameSplitOperator.IsNumber(windowItem.TitleHeight)) frame.ChartBorder.TitleHeight=windowItem.TitleHeight;
10328
10347
  else windowItem.TitleHeight=frame.ChartBorder.TitleHeight;
@@ -10330,21 +10349,33 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10330
10349
  if (IFrameSplitOperator.IsBool(windowItem.IsShowTitleArrow)) frame.IsShowTitleArrow=windowItem.IsShowTitleArrow;
10331
10350
  if (IFrameSplitOperator.IsNumber(windowItem.TitleArrowType)) frame.TitleArrowType=windowItem.TitleArrowType;
10332
10351
  if (IFrameSplitOperator.IsBool(windowItem.IsShowIndexName)) frame.IsShowIndexName=windowItem.IsShowIndexName;
10352
+ if (IFrameSplitOperator.IsBool(windowItem.IsShowOverlayIndexName)) frame.IsShowOverlayIndexName=windowItem.IsShowOverlayIndexName;
10333
10353
  if (IFrameSplitOperator.IsNumber(windowItem.IndexParamSpace)) frame.IndexParamSpace=windowItem.IndexParamSpace;
10334
10354
  if (IFrameSplitOperator.IsNumber(windowItem.IndexTitleSpace)) frame.IndexTitleSpace=windowItem.IndexTitleSpace;
10335
10355
  if (!IFrameSplitOperator.IsUndefined(windowItem.HorizontalReserved)) frame.HorizontalReserved=windowItem.HorizontalReserved; //Y轴上下预留
10336
- if (IFrameSplitOperator.IsBool(windowItem.IsShowNameArrow)) frame.IsShowNameArrow=windowItem.IsShowNameArrow;
10356
+
10357
+ if (windowItem.OverlayIndexType)
10358
+ {
10359
+ if (IFrameSplitOperator.IsNumber(windowItem.OverlayIndexType.Position)) frame.OverlayIndexType.Position=windowItem.OverlayIndexType.Position;
10360
+ if (IFrameSplitOperator.IsNumber(windowItem.OverlayIndexType.LineSpace)) frame.OverlayIndexType.LineSpace=windowItem.OverlayIndexType.LineSpace;
10361
+ }
10337
10362
  }
10338
10363
 
10339
10364
  if (frameItem)
10340
10365
  {
10341
- if (frameItem.SplitCount) frame.YSplitOperator.SplitCount=frameItem.SplitCount;
10366
+ if (frameItem.SplitCount) frame.YSplitOperator.SplitCount=frameItem.SplitCount; //Y轴刻度线个数
10367
+ if (frameItem.StringFormat) frame.YSplitOperator.StringFormat=frameItem.StringFormat; //Y轴文字格式
10368
+ if (IFrameSplitOperator.IsNumber(frameItem.FloatPrecision)) frame.YSplitOperator.FloatPrecision=frameItem.FloatPrecision; //Y轴小数位数
10369
+ if (frameItem.Custom) frame.YSplitOperator.Custom=frameItem.Custom; //Y轴自定义刻度
10370
+
10342
10371
  if (IFrameSplitOperator.IsNumber(frameItem.SplitType))
10343
10372
  {
10344
10373
  frame.YSplitOperator.SplitType=frameItem.SplitType;
10345
10374
  frame.YSplitOperator.DefaultSplitType=frameItem.SplitType;
10346
10375
  }
10347
10376
 
10377
+ if (IFrameSplitOperator.IsNumber(frameItem.FilterType)) frame.YSplitOperator.FilterType=frameItem.FilterType;
10378
+
10348
10379
  if (IFrameSplitOperator.IsBool(frameItem.IsShowXLine)) frame.IsShowXLine=frameItem.IsShowXLine;
10349
10380
  if (IFrameSplitOperator.IsBool(frameItem.IsShowYLine)) frame.IsShowYLine=frameItem.IsShowYLine;
10350
10381
 
@@ -10362,6 +10393,41 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10362
10393
  if (IFrameSplitOperator.IsNumber(frameItem.Height) && frameItem.Height>=0) subFrame.Height = frameItem.Height;
10363
10394
  if (IFrameSplitOperator.IsNumber(frameItem.TopSpace)) frame.ChartBorder.TopSpace=frameItem.TopSpace*pixelRatio;
10364
10395
  if (IFrameSplitOperator.IsNumber(frameItem.BottomSpace)) frame.ChartBorder.BottomSpace=frameItem.BottomSpace*pixelRatio;
10396
+
10397
+ if (IFrameSplitOperator.IsNumber(frameItem.RightTextPosition)) frame.YTextPosition[1]=frameItem.RightTextPosition;
10398
+ if (IFrameSplitOperator.IsNumber(frameItem.LeftTextPosition)) frame.YTextPosition[0]=frameItem.LeftTextPosition;
10399
+ if (IFrameSplitOperator.IsNumber(frameItem.YTextBaseline)) frame.YTextBaseline=frameItem.YTextBaseline;
10400
+
10401
+ if (IFrameSplitOperator.IsNumber(frameItem.YCoordinateType)) frame.YSplitOperator.CoordinateType=frameItem.YCoordinateType; //坐标类型
10402
+ if (frameItem.IsYReverse===true) frame.CoordinateType=1; //反转坐标
10403
+
10404
+ if (IFrameSplitOperator.IsNumber(frameItem.PercentageTextFormat)) frame.YSplitOperator.PercentageTextFormat=frameItem.PercentageTextFormat; //百分比坐标格式
10405
+ if (frameItem.DefaultYMaxMin) frame.YSplitOperator.DefaultYMaxMin=frameItem.DefaultYMaxMin; //指定最大最小值
10406
+ if (IFrameSplitOperator.IsBool(frameItem.EnableRemoveZero)) frame.YSplitOperator.EnableRemoveZero=frameItem.EnableRemoveZero; //Y轴文字小数位是否自动抹0
10407
+ if (IFrameSplitOperator.IsPlusNumber(frameItem.MinYDistance)) frame.MinYDistance=frameItem.MinYDistance;
10408
+ if (IFrameSplitOperator.IsNumber(frameItem.BorderLine)) frame.BorderLine=frameItem.BorderLine;
10409
+ if (IFrameSplitOperator.IsBool(frameItem.IsDrawTitleBottomLine)) frame.IsDrawTitleBottomLine=frameItem.IsDrawTitleBottomLine;
10410
+ if (IFrameSplitOperator.IsBool(frameItem.IsShowIndexTitle)) frame.IsShowIndexTitle=frameItem.IsShowIndexTitle;
10411
+ if (frameItem.ClientBGColor) frame.ClientBGColor=frameItem.ClientBGColor;
10412
+
10413
+ //分时图属性
10414
+ if (IFrameSplitOperator.IsBool(frameItem.CloseBeforeButton)) frameItem.IsShowCloseButton=frameItem.CloseBeforeButton;
10415
+ if (frame.YSplitOperator.RightTextConfig) //主图右侧坐标设置
10416
+ {
10417
+ if (IFrameSplitOperator.IsNumber(frameItem.RightTextFormat)) //废弃(兼容版本)
10418
+ {
10419
+ frame.YSplitOperator.RightTextConfig.Format=frameItem.RightTextFormat;
10420
+ if (frameItem.RightTextFormat==2) frame.MultiTextFormat=1;
10421
+ }
10422
+
10423
+ if (frameItem.RightText) //主图右侧坐标设置(新版本)
10424
+ {
10425
+ var subItem=frameItem.RightText;
10426
+ if (IFrameSplitOperator.IsNumber(subItem.Format)) frame.YSplitOperator.RightTextConfig.Format=subItem.Format;
10427
+ if (subItem.Format==2) frame.MultiTextFormat=1;
10428
+ if (subItem.Percentage && IFrameSplitOperator.IsNumber(subItem.Percentage.Dec)) frame.YSplitOperator.RightTextConfig.Percentage.Dec=subItem.Percentage.Dec;
10429
+ }
10430
+ }
10365
10431
  }
10366
10432
 
10367
10433
  }
@@ -47733,6 +47799,31 @@ function ChartLock()
47733
47799
  this.IndexID; //指标ID
47734
47800
  this.MinWidth=null; //最小宽度
47735
47801
 
47802
+
47803
+ this.CalculateTextSize=function(aryText, defaultFont, out)
47804
+ {
47805
+ if (!out || !IFrameSplitOperator.IsNonEmptyArray(aryText)) return false;
47806
+
47807
+ this.Canvas.font=defaultFont;
47808
+ var lineHeight=this.Canvas.measureText("擎").width; //行高
47809
+ var height=0, width=0;
47810
+ out.AryText=[];
47811
+ for(var i=0;i<aryText.length;++i)
47812
+ {
47813
+ var item=aryText[i];
47814
+ if (!item || !item.Text) continue;
47815
+ var textWidth=this.Canvas.measureText(item.Text).width;
47816
+ if (width<textWidth) width=textWidth;
47817
+ out.AryText.push({ Text:item.Text, Width:textWidth, Height:lineHeight, Color:item.Color });
47818
+ height+=lineHeight;
47819
+ }
47820
+
47821
+ out.Width=width;
47822
+ out.Height=height;
47823
+
47824
+ return true;
47825
+ }
47826
+
47736
47827
  this.Draw=function(isDraw)
47737
47828
  {
47738
47829
  this.LockRect=null;
@@ -47788,24 +47879,39 @@ function ChartLock()
47788
47879
  var rtBG={ Left:lLeft, Top:border.TopTitle, Bottom:border.Bottom, Width:lWidth };
47789
47880
  rtBG.Right=rtBG.Width+rtBG.Left;
47790
47881
  rtBG.Height=rtBG.Bottom-rtBG.Top;
47882
+ this.LockRect=rtBG; //保存上锁区域
47791
47883
 
47792
- if (isDraw)
47793
- {
47794
- //上下渐变
47795
- var bgColor=this.SetFillStyle(this.BGColor, rtBG.Left, rtBG.Top, rtBG.Left, rtBG.Bottom);
47796
- this.Canvas.fillStyle =bgColor;
47797
- this.Canvas.fillRect(rtBG.Left, rtBG.Top, rtBG.Width, rtBG.Height);
47884
+ if (!isDraw) return;
47885
+
47886
+ //上下渐变
47887
+ var bgColor=this.SetFillStyle(this.BGColor, rtBG.Left, rtBG.Top, rtBG.Left, rtBG.Bottom);
47888
+ this.Canvas.fillStyle =bgColor;
47889
+ this.Canvas.fillRect(rtBG.Left, rtBG.Top, rtBG.Width, rtBG.Height);
47798
47890
 
47799
- var xCenter = rtBG.Left + rtBG.Width / 2;
47800
- var yCenter = rtBG.Top + rtBG.Height / 2;
47801
- this.Canvas.textAlign = 'center';
47802
- this.Canvas.textBaseline = 'middle';
47803
- this.Canvas.fillStyle = this.TextColor;
47804
- this.Canvas.font = this.Font;
47805
- this.Canvas.fillText(this.Title, xCenter, yCenter);
47806
- }
47891
+ var aryText=null;
47892
+ if (Array.isArray(this.Title)) aryText=this.Title;
47893
+ else aryText=[{Text:this.Title}];
47894
+
47895
+ var outSize={ };
47896
+ if (!this.CalculateTextSize(aryText, this.Font, outSize)) return;
47807
47897
 
47808
- this.LockRect=rtBG; //保存上锁区域
47898
+ var left=rtBG.Left+(rtBG.Width-outSize.Width)/2;
47899
+ if (outSize.Width>rtBG.Width) left=rtBG.Right-outSize.Width;
47900
+ var top=rtBG.Top+(rtBG.Height-outSize.Height)/2;
47901
+
47902
+ this.Canvas.textAlign='left';
47903
+ this.Canvas.textBaseline='bottom';
47904
+ this.Canvas.font = this.Font;
47905
+ var yText=top;
47906
+ for(var i=0;i<outSize.AryText.length;++i)
47907
+ {
47908
+ var item=outSize.AryText[i];
47909
+ if (item.Color) this.Canvas.fillStyle=item.Color;
47910
+ else this.Canvas.fillStyle=this.TextColor;
47911
+
47912
+ yText+=item.Height;
47913
+ this.Canvas.fillText(item.Text, left, yText);
47914
+ }
47809
47915
  }
47810
47916
 
47811
47917
  this.HScreenDraw=function(isDraw)
@@ -50243,6 +50349,20 @@ function StockChipPhone()
50243
50349
 
50244
50350
  this.CloseButtonConfig=CloneData(g_JSChartResource.StockChip.PhoneCloseButton);
50245
50351
 
50352
+ this.Super_SetOption=this.SetOption;
50353
+
50354
+ this.SetOption=function(option)
50355
+ {
50356
+ this.Super_SetOption(option);
50357
+
50358
+ if (!option) return;
50359
+
50360
+ if (option.PhoneCloseButton)
50361
+ {
50362
+ var item=option.PhoneCloseButton;
50363
+ if (IFrameSplitOperator.IsBool(item.IsShow)) this.CloseButtonConfig.IsShow=item.IsShow;
50364
+ }
50365
+ }
50246
50366
 
50247
50367
  this.Draw=function()
50248
50368
  {
@@ -50657,6 +50777,8 @@ function StockChipPhone()
50657
50777
  this.DrawCloseButton=function()
50658
50778
  {
50659
50779
  var config=this.CloseButtonConfig;
50780
+ if (!config.IsShow) return;
50781
+
50660
50782
  var font=`${config.Size}px ${config.Family}`;
50661
50783
  var rtButton=null;
50662
50784
  if (this.IsHScreen)
@@ -77998,7 +78120,8 @@ function JSChartResource()
77998
78120
  Size:16*GetDevicePixelRatio(),
77999
78121
  Text:"\ue60c",
78000
78122
  Color:"rgb(255,255,255)",
78001
- Border:{ BGColor:"rgb(169,169,169)" }
78123
+ Border:{ BGColor:"rgb(169,169,169)" },
78124
+ IsShow:true,
78002
78125
  }
78003
78126
  }
78004
78127
 
@@ -79060,6 +79183,7 @@ function JSChartResource()
79060
79183
  if (subItem.Text) this.StockChip.PhoneCloseButton.Text=subItem.Text;
79061
79184
  if (subItem.Color) this.StockChip.PhoneCloseButton.Color=subItem.Color;
79062
79185
  if (IFrameSplitOperator.IsNumber(subItem.Size)) this.StockChip.PhoneCloseButton.Size=subItem.Size;
79186
+ if (IFrameSplitOperator.IsBool(subItem.IsShow)) this.StockChip.PhoneCloseButton.IsShow=subItem.IsShow;
79063
79187
  if (subItem.Border)
79064
79188
  {
79065
79189
  if (subItem.Border.BGColor) this.StockChip.PhoneCloseButton.Border.BGColor=subItem.Border.BGColor;
@@ -105377,6 +105501,7 @@ function JSDivFrameToolbar()
105377
105501
  if (item.ID==JSCHART_BUTTON_ID.CHANGE_INDEX && frame && frame.ChangeIndex===false) continue;
105378
105502
  if (item.ID==JSCHART_BUTTON_ID.OVERLAY_INDEX && frame && frame.OverlayIndex===false) continue;
105379
105503
  if (item.ID==JSCHART_BUTTON_ID.CLOSE_INDEX_WINDOW && frame && frame.CloseIndex===false) continue;
105504
+ if (item.ID==JSCHART_BUTTON_ID.INDEX_HELP && frame && frame.IndexHelp===false) continue;
105380
105505
 
105381
105506
  aryButton.push(item);
105382
105507
  }
@@ -105580,7 +105705,10 @@ JSDivFrameToolbar.GetDfaultButtons=function()
105580
105705
  {
105581
105706
  var aryButton=
105582
105707
  [
105583
-
105708
+ {
105709
+ ID:JSCHART_BUTTON_ID.INDEX_HELP, ClassName:"UMyChart_FrameToolbar_Span_Button icon iconfont icon-help", Tooltip:{ Text:"帮助"},
105710
+ Span:null, Div:null, TooltipSpan:null
105711
+ },
105584
105712
  {
105585
105713
  ID:JSCHART_BUTTON_ID.MODIFY_INDEX_PARAM, ClassName:"UMyChart_FrameToolbar_Span_Button icon iconfont icon-index_param", Tooltip:{ Text:"修改参数"},
105586
105714
  Span:null, Div:null, TooltipSpan:null