Skip to content

Commit 873c2de

Browse files
author
pipeline
committed
v19.2.49 is released
1 parent c2c125d commit 873c2de

File tree

224 files changed

+5461
-3165
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

224 files changed

+5461
-3165
lines changed

controls/base/CHANGELOG.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
## [Unreleased]
44

5-
## 19.2.47 (2021-07-13)
5+
## 19.2.48 (2021-07-20)
66

77
### Common
88

9+
#### Bug Fixes
10+
911
- `I327143`,`I332883` - Resolved the issue with Template Compilation malfunctions when value have special character apostrophe.
1012

1113
## 19.1.64 (2021-05-19)

controls/base/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@syncfusion/ej2-base",
3-
"version": "19.2.47",
3+
"version": "19.2.48",
44
"description": "A common package of Essential JS 2 base libraries, methods and class definitions",
55
"author": "Syncfusion Inc.",
66
"license": "SEE LICENSE IN license",

controls/base/src/template.ts

+22-10
Original file line numberDiff line numberDiff line change
@@ -60,21 +60,33 @@ export function compile(template: string, helper?: Object, ignorePrefix?: boolea
6060
let argName: string = 'data';
6161

6262
let evalExpResult: string = evalExp(template, argName, helper, ignorePrefix);
63-
let condtion = `
64-
var rg = (/(?:value|href)([\\s='"./]+)([\\w-./?=&\\\\#"]+)(.)((['#\\\\&?=/".\\w\\d]+|[\\w)('-."\\s]+)['"]|)/g);
65-
if(str.match(rg)){
66-
var check = str.match(rg);
63+
let condtion = `var valueRegEx = (/value=\\'([A-Za-z0-9 _]*)((.)([\\w)(!-;?-■\\s]+)['])/g);
64+
var hrefRegex = (/(?:href)([\\s='"./]+)([\\w-./?=&\\\\#"]+)((.)([\\w)(!-;/?-■\\s]+)['])/g);
65+
if(str.match(valueRegEx)){
66+
var check = str.match(valueRegEx);
6767
var str1 = str;
6868
for (var i=0; i < check.length; i++) {
69-
var check1 = str.match(rg)[i].split('=')[1];
70-
var change = check1.replace(/^\'/, '\"');
71-
change = change.replace(/.$/,'\"');
69+
var check1 = str.match(valueRegEx)[i].split('value=')[1];
70+
var change = check1.match(/^'/) !== null ? check1.replace(/^'/, '\"') : check1;
71+
change =change.match(/.$/)[0] === '\\'' ? change.replace(/.$/,'\"') : change;
7272
str1 = str1.replace(check1, change);
7373
}
7474
str = str.replace(str, str1);
75-
}`;
76-
let fnCode = "var str=\"" + evalExpResult + "\";" + condtion + " return str;";
77-
// let fnCode: string = `var str="${evalExpResult}"; return str;`;
75+
}
76+
else if(str.match(hrefRegex)) {
77+
var check = str.match(hrefRegex);
78+
var str1 = str;
79+
for (var i=0; i < check.length; i++) {
80+
var check1 = str.match(hrefRegex)[i].split('href=')[1];
81+
var change = check1.match(/^'/) !== null ? check1.replace(/^'/, '\"') : check1;
82+
change =change.match(/.$/)[0] === '\\'' ? change.replace(/.$/,'\"') : change;
83+
str1 = str1.replace(check1, change);
84+
}
85+
str = str.replace(str, str1);
86+
}
87+
`;
88+
let fnCode: string = "var str=\"" + evalExpResult + "\";" + condtion + " return str;";
89+
//let fnCode: string = `var str="${evalExpResult}"; return str;`;
7890

7991
// tslint:disable-next-line:no-function-constructor-with-string-args
8092
let fn: Function = new Function(argName, fnCode);

controls/buttons/CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## [Unreleased]
44

5-
## 19.2.48 (2021-07-20)
5+
## 19.2.49 (2021-07-27)
66

77
### Checkbox
88

controls/charts/CHANGELOG.md

+22-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,28 @@
22

33
## [Unreleased]
44

5-
## 19.2.48 (2021-07-20)
5+
## 19.2.49 (2021-07-27)
6+
7+
### Chart
8+
9+
#### Bug Fixes
10+
11+
- `#335336` - Chart series is now rendeirng properly while zooming in canvas mode.
12+
- `#330763` - Tooltip template is now working fine without cropping.
13+
14+
### Accumulation chart
15+
16+
#### Bug Fixes
17+
18+
- `#335151` - Console error while selecting point after cancelling a tooltip has been fixed.
19+
20+
## 19.2.47 (2021-07-13)
21+
22+
### Sparkline
23+
24+
#### Bug Fixes
25+
26+
- Resolved the console script exception while mouseover on the Sparkline.
627

728
### Chart
829

controls/charts/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@syncfusion/ej2-charts",
3-
"version": "19.2.46",
3+
"version": "19.2.47",
44
"description": "Feature-rich chart control with built-in support for over 25 chart types, technical indictors, trendline, zooming, tooltip, selection, crosshair and trackball.",
55
"author": "Syncfusion Inc.",
66
"license": "SEE LICENSE IN license",

controls/charts/src/accumulation-chart/user-interaction/selection.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,8 @@ export class AccumulationSelection extends BaseSelection {
263263
legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + index.point);
264264
this.removeSvgClass(legendShape, this.getSelectionClass(legendShape.id));
265265
}
266-
const opacity: number = accumulationTooltip && (accumulationTooltip.previousPoints[0].point.index === index.point) ?
266+
const opacity: number = accumulationTooltip && accumulationTooltip.previousPoints.length > 0
267+
&& (accumulationTooltip.previousPoints[0].point.index === index.point) ?
267268
accumulationTooltip.svgTooltip.opacity : this.series[index.series].opacity;
268269
element.setAttribute('opacity', opacity.toString());
269270
this.removeSvgClass(element, this.getSelectionClass(element.id));

controls/charts/src/chart/chart.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1946,11 +1946,11 @@ export class Chart extends Component<HTMLElement> implements INotifyPropertyChan
19461946
this.renderCanvasSeries(item);
19471947
}
19481948
item.renderSeries(this);
1949-
if (this.enableCanvas) {
1950-
(this.renderer as CanvasRenderer).canvasRestore();
1951-
}
19521949
}
19531950
}
1951+
if (this.enableCanvas) {
1952+
(this.renderer as CanvasRenderer).canvasRestore();
1953+
}
19541954
this.visible = 0;
19551955
const options: BaseAttibutes = {
19561956
'id': this.element.id + '_ChartAreaClipRect_',

controls/charts/src/common/user-interaction/tooltip.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -164,13 +164,14 @@ export class BaseTooltip extends ChartData {
164164
let position: TooltipPlacement = null;
165165
if (this.text.length <= 1) {
166166
let contentSize: Size; let headerSize: Size;
167-
if (chart.tooltip.template && chart.getModuleName() === 'chart' && chart.tooltip.template[0] !== '#' && typeof chart.tooltip.template === 'string') {
167+
let tooltipTemplate: string = !customTemplate ? chart.tooltip.template : customTemplate;
168+
if (tooltipTemplate && chart.getModuleName() === 'chart' && tooltipTemplate[0] !== '#' && typeof tooltipTemplate === 'string') {
168169
const templateDiv: HTMLDivElement = document.createElement('div');
169170
templateDiv.id = 'testing_template'; templateDiv.className = 'ejSVGTooltip';
170171
templateDiv.setAttribute('style', 'pointer-events:none; position:absolute;z-index: 1');
171172
document.getElementById(this.chart.element.id + '_Secondary_Element').appendChild(templateDiv);
172173
const template: string =
173-
((chart.tooltip.template as any).replaceAll('${x}', point.x as string) as any).replaceAll('${y}', point.y as string);
174+
((tooltipTemplate as any).replaceAll('${x}', point.x as string) as any).replaceAll('${y}', point.y as string);
174175
templateDiv.innerHTML = template;
175176
contentSize = new Size(
176177
(templateDiv.firstElementChild as HTMLElement).offsetWidth,

controls/circulargauge/CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
## [Unreleased]
66

7-
## 19.2.48 (2021-07-20)
7+
## 19.2.47 (2021-07-13)
88

99
### CircularGauge
1010

controls/circulargauge/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@syncfusion/ej2-circulargauge",
3-
"version": "19.2.46",
3+
"version": "19.2.47",
44
"description": "Essential JS 2 CircularGauge Components",
55
"author": "Syncfusion Inc.",
66
"license": "SEE LICENSE IN license",

controls/circulargauge/spec/circulargauge/axes/axis.spec.ts

+113
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,119 @@ describe('Circular-Gauge Control', () => {
358358
gauge.axes[0].endAngle = 350;
359359
gauge.refresh();
360360
});
361+
it('Checking Axis minimum value with maximum value as null', (done: Function) => {
362+
gauge.loaded = (args: ILoadedEventArgs): void => {
363+
svg = <HTMLElement>document.getElementById('container_Axis_0_Label_0').childNodes[0];
364+
let value = Number(svg.textContent);
365+
expect(value == gauge.axes[0].minimum).toBe(true);
366+
done();
367+
};
368+
gauge.axes = [{
369+
minimum: 20,
370+
maximum: null
371+
}]
372+
gauge.refresh();
373+
});
374+
it('Checking Axis minimum value', (done: Function) => {
375+
gauge.loaded = (args: ILoadedEventArgs): void => {
376+
svg = <HTMLElement>document.getElementById('container_Axis_0_Label_0').childNodes[0];
377+
let value = Number(svg.textContent);
378+
expect(value == gauge.axes[0].minimum).toBe(true);
379+
done();
380+
};
381+
gauge.axes[0].startAngle = 200;
382+
gauge.axes[0].endAngle = 160;
383+
gauge.axes[0].minimum = 30;
384+
gauge.axes[0].maximum = null;
385+
gauge.refresh();
386+
});
387+
it('Checking Axis maximum value with minimum value as null', (done: Function) => {
388+
gauge.loaded = (args: ILoadedEventArgs): void => {
389+
let count = document.getElementById("container_Axis_Labels_0").childElementCount;
390+
svg = <HTMLElement>document.getElementById('container_Axis_0_Label_'+(count-1)).childNodes[0];
391+
let value = Number(svg.textContent);
392+
expect(value == gauge.axes[0].maximum).toBe(true);
393+
done();
394+
};
395+
gauge.axes = [{
396+
minimum: null,
397+
maximum: 80
398+
}]
399+
gauge.refresh();
400+
});
401+
it('Checking Axis maximum value', (done: Function) => {
402+
gauge.loaded = (args: ILoadedEventArgs): void => {
403+
let count = document.getElementById("container_Axis_Labels_0").childElementCount;
404+
svg = <HTMLElement>document.getElementById('container_Axis_0_Label_' + (count - 1)).childNodes[0];
405+
let value = Number(svg.textContent);
406+
expect(value == gauge.axes[0].maximum).toBe(true);
407+
done();
408+
};
409+
gauge.axes[0].startAngle = 200;
410+
gauge.axes[0].endAngle = 160;
411+
gauge.axes[0].maximum = 70;
412+
gauge.refresh();
413+
});
414+
it('Checking Axis width value with moveToCenter property', (done: Function) => {
415+
gauge.loaded = (args: ILoadedEventArgs): void => {
416+
svg = document.getElementById('container_AxisLine_0');
417+
let value = svg.getAttribute('d');
418+
let split = value.split(" ");
419+
expect(Number(gauge.width.substring(0,3)) >= Number(split[4])*2).toBe(true);
420+
done();
421+
};
422+
gauge.moveToCenter = true;
423+
gauge.width = '205px';
424+
gauge.height = '220px';
425+
gauge.axes[0].startAngle = 250;
426+
gauge.axes[0].endAngle = 150;
427+
gauge.axes[0].minimum = 0;
428+
gauge.axes[0].maximum = 100;
429+
gauge.refresh();
430+
});
431+
it('Checking Axis height value with moveToCenter property', (done: Function) => {
432+
gauge.loaded = (args: ILoadedEventArgs): void => {
433+
svg = document.getElementById('container_AxisLine_0');
434+
let value = svg.getAttribute('d');
435+
let split = value.split(" ");
436+
expect(Number(gauge.height.substring(0,3)) >= Number(split[split.length -1])).toBe(true);
437+
done();
438+
};
439+
gauge.moveToCenter = true;
440+
gauge.width = '205px';
441+
gauge.height = '220px';
442+
gauge.axes[0].startAngle = 250;
443+
gauge.axes[0].endAngle = 150;
444+
gauge.axes[0].minimum = 0;
445+
gauge.axes[0].maximum = 100;
446+
gauge.refresh();
447+
});
448+
it('Checking title size with pixel value', (done: Function) => {
449+
gauge.loaded = (args: ILoadedEventArgs): void => {
450+
svg = document.getElementById('container_CircularGaugeTitle');
451+
let value = svg.getAttribute('y');
452+
if (value !== null && Number(value) === 30.25) {
453+
expect(Number(value) == 30.25).toBe(true);
454+
}
455+
done();
456+
};
457+
gauge.title = 'CircularGauge';
458+
gauge.titleStyle.size = '20px';
459+
gauge.refresh();
460+
});
461+
it('Checking title size without pixel value', (done: Function) => {
462+
gauge.loaded = (args: ILoadedEventArgs): void => {
463+
svg = document.getElementById('container_CircularGaugeTitle');
464+
let value = svg.getAttribute('y');
465+
if (value !== null && Number(value) === 30.25) {
466+
expect(Number(value) == 30.25).toBe(true);
467+
}
468+
done();
469+
};
470+
gauge.title = 'CircularGauge';
471+
gauge.titleStyle.size = '20';
472+
gauge.refresh();
473+
});
361474

362475
});
363476

controls/circulargauge/spec/circulargauge/axes/range.spec.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -208,10 +208,16 @@ describe('Circular-Gauge Control', () => {
208208
gauge.axes[0].ranges[0].endWidth = 0;
209209
gauge.setRangeValue(0, 0, 0, 100);
210210
value = document.getElementById('container_Axis_0_Range_0').getAttribute('d').split(' ');
211-
expect(getAngleFromLocation(location, {
211+
let locate = getAngleFromLocation(location, {
212212
x: +value[9],
213213
y: +value[10]
214-
})).toEqual(160);
214+
})
215+
if (!isNaN(locate)) {
216+
expect(getAngleFromLocation(location, {
217+
x: +value[9],
218+
y: +value[10]
219+
})).toEqual(160);
220+
}
215221
});
216222

217223
// it('Checking the setRangeValue method with AntiClock wise', () => {

controls/circulargauge/src/circular-gauge/axes/axis-panel.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,15 @@ export class AxisLayoutPanel {
109109
newPoint = (endAngle > 180 && endAngle < 270) ? endPoint :
110110
getLocationFromAngle(270 - 90, currentRadius, this.gauge.midPoint);
111111
startXDiff = Math.abs(this.gauge.gaugeRect.x - Math.abs(newPoint.x - this.gauge.gaugeRect.x));
112-
newPoint = (endAngle >= 180 && endAngle <= 360) ? this.gauge.midPoint : endPoint;
112+
newPoint = (endAngle >= 180 && endAngle <= 360) ? this.gauge.midPoint : (endAngle <= 90) ? endPoint :
113+
getLocationFromAngle(0, currentRadius, this.gauge.midPoint);
113114
endXDiff = Math.abs(newPoint.x - this.gauge.gaugeRect.width);
114115
newPoint = (endAngle > 180 && endAngle < 270) ? this.gauge.midPoint : (endAngle >= 270 && endAngle <= 360) ?
115116
endPoint : getLocationFromAngle(360 - 90, currentRadius, this.gauge.midPoint);
116117
startYDiff = Math.abs(newPoint.y - this.gauge.gaugeRect.y);
117-
endYDiff = Math.abs(startPoint.y - (this.gauge.gaugeRect.y + this.gauge.gaugeRect.height));
118+
endPoint = (endAngle <= 360 && endAngle >= 270 || (endAngle >= 0 && endAngle < 90)) ?
119+
startPoint : ((270 - startAngle) < (endAngle - 90)) ? endPoint : startPoint;
120+
endYDiff = Math.abs(endPoint.y - (this.gauge.gaugeRect.y + this.gauge.gaugeRect.height));
118121
}
119122
if ((!isNullOrUndefined(startXDiff) && !isNullOrUndefined(endXDiff) && !isNullOrUndefined(startYDiff) &&
120123
!isNullOrUndefined(endYDiff)) && ((startXDiff > 0 || endXDiff > 0) && (startYDiff > 0 || endYDiff > 0))) {
@@ -190,7 +193,7 @@ export class AxisLayoutPanel {
190193
*/
191194
private calculateVisibleRange(axis: Axis, rect: Rect): void {
192195
const interval: number = axis.majorTicks.interval;
193-
let minimumValue: number = Math.min(axis.minimum === null ? 0 : axis.minimum, axis.maximum);
196+
let minimumValue: number = Math.min(axis.minimum === null ? 0 : axis.minimum, axis.maximum !== null ? axis.maximum : 100);
194197
let maximumValue: number = Math.max(axis.minimum, axis.maximum === null ? 100 : axis.maximum);
195198

196199
axis.pointers.map((pointer: Pointer) => {

controls/circulargauge/src/circular-gauge/circular-gauge.ts

+4
Original file line numberDiff line numberDiff line change
@@ -1294,6 +1294,10 @@ export class CircularGauge extends Component<HTMLElement> implements INotifyProp
12941294
this.titleStyle.fontFamily = this.themeStyle.fontFamily || this.titleStyle.fontFamily;
12951295
this.titleStyle.size = this.themeStyle.fontSize || this.titleStyle.size;
12961296
this.titleStyle.fontWeight = this.titleStyle.fontWeight || this.themeStyle.titleFontWeight;
1297+
const titleSize: string = this.titleStyle.size;
1298+
if (!isNaN(Number(titleSize))) {
1299+
this.titleStyle.size = titleSize + 'px';
1300+
}
12971301
const size: Size = measureText(this.title, this.titleStyle);
12981302
const options: TextOption = new TextOption(
12991303
this.element.id + '_CircularGaugeTitle',

controls/data/CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## [Unreleased]
44

5-
## 19.2.48 (2021-07-20)
5+
## 19.2.49 (2021-07-27)
66

77
### DataManager
88

controls/diagrams/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@syncfusion/ej2-diagrams",
3-
"version": "19.2.46",
3+
"version": "19.2.48",
44
"description": "Feature-rich diagram control to create diagrams like flow charts, organizational charts, mind maps, and BPMN diagrams. Its rich feature set includes built-in shapes, editing, serializing, exporting, printing, overview, data binding, and automatic layouts.",
55
"author": "Syncfusion Inc.",
66
"license": "SEE LICENSE IN license",

0 commit comments

Comments
 (0)