Skip to content

Commit 630c109

Browse files
OlgaLarinaOlgaLarina
and
OlgaLarina
authored
Scaling options accept invalid values (#6639)
* work for #6625 Scaling options accept invalid values * work for #6625 Scaling options accept invalid values --------- Co-authored-by: OlgaLarina <olga.larina.dev@gmail.com>
1 parent eac298b commit 630c109

File tree

7 files changed

+82
-9
lines changed

7 files changed

+82
-9
lines changed

packages/survey-creator-angular/src/custom-questions/spin-editor.component.html

+2
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88
[class]="model.cssClasses.control" />
99
<span [class]="model.cssClasses.buttonsContainer">
1010
<button [disabled]="model.isInputReadOnly" [class]="model.cssClasses.arrowButton"
11+
(click)="model.onDownButtonClick()"
1112
(mousedown)="model.onDownButtonMouseDown()" (mouseup)="model.onButtonMouseUp()"
1213
(mouseleave)="model.onButtonMouseLeave()" (blur)="model.onBlur($event)" (focus)="model.onFocus($event)" tabindex="-1">
1314
<svg [iconName]="model.cssClasses.decreaseButtonIcon" [size]="'auto'" sv-ng-svg-icon></svg>
1415
</button>
1516
<button [disabled]="model.isInputReadOnly" [class]="model.cssClasses.arrowButton"
17+
(click)="model.onUpButtonClick()"
1618
(mousedown)="model.onUpButtonMouseDown()" (mouseup)="model.onButtonMouseUp()"
1719
(mouseleave)="model.onButtonMouseLeave()" (blur)="model.onBlur($event)" (focus)="model.onFocus($event)" tabindex="-1">
1820
<svg [iconName]="model.cssClasses.increaseButtonIcon" [size]="'auto'" sv-ng-svg-icon></svg>

packages/survey-creator-core/src/creator-theme/creator-theme-model.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -310,11 +310,13 @@ Serializer.addProperties("creatortheme", [
310310
onPropertyEditorUpdate: function (obj: any, editor: any) {
311311
if (!!editor) {
312312
editor.unit = "%";
313-
editor.min = 0;
313+
editor.min = 50;
314+
editor.max = 200;
314315
editor.step = 5;
315316
editor.title = getLocString("creatortheme.fontScale");
316317
editor.titleLocation = "left";
317318
editor.descriptionLocation = "hidden";
319+
editor.changeValueOnPressing = false;
318320
}
319321
}
320322
}, {
@@ -364,11 +366,13 @@ Serializer.addProperties("creatortheme", [
364366
onPropertyEditorUpdate: function (obj: any, editor: any) {
365367
if (!!editor) {
366368
editor.unit = "%";
367-
editor.min = 0;
369+
editor.min = 25;
370+
editor.max = 200;
368371
editor.step = 5;
369372
editor.title = getLocString("creatortheme.userInterfaceBaseUnit");
370373
editor.titleLocation = "left";
371374
editor.descriptionLocation = "hidden";
375+
editor.changeValueOnPressing = false;
372376
}
373377
}
374378
}, {

packages/survey-creator-core/src/custom-questions/question-spin-editor.ts

+21-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { QuestionFactory, QuestionTextModel, Serializer, property } from "survey
22

33
export class QuestionSpinEditorModel extends QuestionTextModel {
44
@property() public unit: string;
5+
@property() public changeValueOnPressing: boolean;
56
@property() private _showUnitsInEditor: boolean = true;
67

78
private parseValue(val: string | number): { unit?: string, value: number } {
@@ -65,19 +66,37 @@ export class QuestionSpinEditorModel extends QuestionTextModel {
6566
clearTimeout(this.increaseTimer);
6667
}
6768
public onUpButtonMouseDown = () => {
69+
if (!this.changeValueOnPressing) return;
70+
6871
this.increase();
6972
this.clearTimers();
7073
this.increaseTimer = setTimeout(this.onUpButtonMouseDown, 200);
7174
}
7275
public onDownButtonMouseDown = () => {
76+
if (!this.changeValueOnPressing) return;
77+
7378
this.decrease();
7479
this.clearTimers();
7580
this.decreaseTimer = setTimeout(this.onDownButtonMouseDown, 200);
7681
}
82+
public onUpButtonClick = () => {
83+
if (!this.changeValueOnPressing) {
84+
this.increase();
85+
}
86+
}
87+
public onDownButtonClick = () => {
88+
if (!this.changeValueOnPressing) {
89+
this.decrease();
90+
}
91+
}
7792
public onButtonMouseLeave = () => {
93+
if (!this.changeValueOnPressing) return;
94+
7895
this.onButtonMouseUp();
7996
}
8097
public onButtonMouseUp = () => {
98+
if (!this.changeValueOnPressing) return;
99+
81100
this.clearTimers();
82101
}
83102
public onKeyDown = (event: KeyboardEvent) => {
@@ -138,7 +157,8 @@ export class QuestionSpinEditorModel extends QuestionTextModel {
138157
}
139158
}
140159
Serializer.addClass("spinedit", [
141-
"unit"
160+
"unit",
161+
{ name: "changeValueOnPressing:boolean", default: true }
142162
], () => new QuestionSpinEditorModel(""), "text");
143163
QuestionFactory.Instance.registerQuestion("spinedit", name => {
144164
return new QuestionSpinEditorModel(name);

packages/survey-creator-core/tests/creator-theme/creator-theme-model.tests.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -179,11 +179,11 @@ test("Creator theme check scale", (): any => {
179179
expect(themeModelJsonCssVariables["--ctr-font-unit"]).toEqual("12px");
180180
expect(themeModelJsonCssVariables["--ctr-line-height-unit"]).toEqual("12px");
181181

182-
scale.value = 225;
182+
scale.value = 225; // max = 200
183183
themeModelJsonCssVariables = themeModel.toJSON().cssVariables || {};
184-
expect(themeModelJsonCssVariables["--ctr-size-unit"]).toEqual("18px");
185-
expect(themeModelJsonCssVariables["--ctr-spacing-unit"]).toEqual("18px");
186-
expect(themeModelJsonCssVariables["--ctr-corner-radius-unit"]).toEqual("18px");
184+
expect(themeModelJsonCssVariables["--ctr-size-unit"]).toEqual("16px");
185+
expect(themeModelJsonCssVariables["--ctr-spacing-unit"]).toEqual("16px");
186+
expect(themeModelJsonCssVariables["--ctr-corner-radius-unit"]).toEqual("16px");
187187
});
188188

189189
test("Creator theme: apply custom theme", (): any => {

packages/survey-creator-core/tests/property-grid/spin-editor.tests.ts

+45-2
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ test("Check spin editor question event callbacks", (done) => {
5454
question.onBeforeInput(<any>{ data: "-", target: { selectionStart: 1 }, preventDefault: () => { beforeInputlog += "->-"; } });
5555
expect(beforeInputlog).toBe("->-");
5656

57-
question.onKeyDown(<any>{ key: "ArrowDown", stopPropagation: () => {}, preventDefault: () => {} });
57+
question.onKeyDown(<any>{ key: "ArrowDown", stopPropagation: () => { }, preventDefault: () => { } });
5858
expect(question.value).toBe(15);
59-
question.onKeyDown(<any>{ key: "ArrowUp", stopPropagation: () => {}, preventDefault: () => {} });
59+
question.onKeyDown(<any>{ key: "ArrowUp", stopPropagation: () => { }, preventDefault: () => { } });
6060
expect(question.value).toBe(16);
6161

6262
question.onDownButtonMouseDown();
@@ -89,3 +89,46 @@ test("Check spin editor question event callbacks", (done) => {
8989
}, 200);
9090
}, 200);
9191
});
92+
93+
test("Check spin editor question event callbacks if changeValueOnPressing is false", (done) => {
94+
const question = new QuestionSpinEditorModel("q1");
95+
question.changeValueOnPressing = false;
96+
question.value = 16;
97+
98+
question.onDownButtonMouseDown();
99+
question.onButtonMouseUp();
100+
expect(question.value).toBe(16);
101+
102+
question.onDownButtonClick();
103+
expect(question.value).toBe(15);
104+
105+
question.onUpButtonMouseDown();
106+
question.onButtonMouseUp();
107+
expect(question.value).toBe(15);
108+
109+
question.onUpButtonClick();
110+
expect(question.value).toBe(16);
111+
112+
question.onBlur(<any>{ target: { tagName: "BUTTON", value: "17" } });
113+
expect(question.value).toBe(16);
114+
question.onBlur(<any>{ target: { tagName: "INPUT", value: "17" } });
115+
expect(question.value).toBe(17);
116+
117+
question.value = 16;
118+
question.onDownButtonMouseDown();
119+
setTimeout(() => {
120+
question.onButtonMouseUp();
121+
expect(question.value).toBe(16);
122+
question.onUpButtonMouseDown();
123+
setTimeout(() => {
124+
question.onButtonMouseLeave();
125+
expect(question.value).toBe(16);
126+
question.onDownButtonMouseDown();
127+
setTimeout(() => {
128+
question.onButtonMouseUp();
129+
expect(question.value).toBe(16);
130+
done();
131+
}, 200);
132+
}, 200);
133+
}, 200);
134+
});

packages/survey-creator-react/src/custom-questions/SpinEditor.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ export class SurveyQuestionSpinEditor extends SurveyQuestionText {
5151
tabIndex={-1}
5252
className={this.question.cssClasses.arrowButton}
5353
disabled={this.isDisplayMode}
54+
onClick={this.question.onDownButtonClick}
5455
onMouseDown={this.question.onDownButtonMouseDown}
5556
onMouseUp={this.question.onButtonMouseUp}
5657
onMouseLeave={this.question.onButtonMouseLeave}
@@ -62,6 +63,7 @@ export class SurveyQuestionSpinEditor extends SurveyQuestionText {
6263
tabIndex={-1}
6364
className={this.question.cssClasses.arrowButton}
6465
disabled={this.isDisplayMode}
66+
onClick={this.question.onUpButtonClick}
6567
onMouseDown={this.question.onUpButtonMouseDown}
6668
onMouseUp={this.question.onButtonMouseUp}
6769
onMouseLeave={this.question.onButtonMouseLeave}

packages/survey-creator-vue/src/custom-questions/SpinEditor.vue

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
<button
2323
:disabled="question.isInputReadOnly"
2424
:class="question.cssClasses.arrowButton"
25+
@click="question.onDownButtonClick"
2526
@mousedown="question.onDownButtonMouseDown"
2627
@mouseup="question.onButtonMouseUp"
2728
@mouseleave="question.onButtonMouseLeave"
@@ -38,6 +39,7 @@
3839
<button
3940
:disabled="question.isInputReadOnly"
4041
:class="question.cssClasses.arrowButton"
42+
@click="question.onUpButtonClick"
4143
@mousedown="question.onUpButtonMouseDown"
4244
@mouseup="question.onButtonMouseUp"
4345
@mouseleave="question.onButtonMouseLeave"

0 commit comments

Comments
 (0)