@baravak/risloo-profile-cli 4.22.0 → 4.25.1
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 +1 -1
- package/src/helpers/gauge.js +3 -3
- package/src/publish/json/profiles/16PF93.json +193 -790
- package/src/publish/json/profiles/16PF9A.json +42 -58
- package/src/publish/json/profiles/16PFOld93.json +2623 -0
- package/src/samples/16PF93.js +132 -110
- package/src/samples/16PF9A.js +113 -67
- package/src/samples/16PFOld93.js +158 -0
- package/src/samples/AAI93.js +1 -4
- package/src/samples/CAATS93.js +1 -1
- package/views/profiles/samples/16PF93.hbs +97 -47
- package/views/profiles/samples/16PF9A.hbs +84 -48
- package/views/profiles/samples/16PFOld93.hbs +3 -0
- package/views/profiles/samples/BNQ93.hbs +8 -8
package/src/samples/16PF93.js
CHANGED
|
@@ -1,36 +1,90 @@
|
|
|
1
|
-
const
|
|
1
|
+
const gauge = require("../helpers/gauge");
|
|
2
|
+
const { Profile } = require("../Profile");
|
|
3
|
+
const rowStyle = [
|
|
4
|
+
['#1D4ED8', 1],
|
|
5
|
+
['#1D4ED8', 0.9],
|
|
6
|
+
['#1D4ED8', 0.8],
|
|
7
|
+
['#1D4ED8', 0.7],
|
|
2
8
|
|
|
9
|
+
['#94A3B8', 1],
|
|
10
|
+
['#94A3B8', 1],
|
|
11
|
+
|
|
12
|
+
['#0E7490', 0.7],
|
|
13
|
+
['#0E7490', 0.8],
|
|
14
|
+
['#0E7490', 0.9],
|
|
15
|
+
['#0E7490', 1],
|
|
16
|
+
]
|
|
17
|
+
const alertStyle = {
|
|
18
|
+
valid: {
|
|
19
|
+
primary: '#059669',
|
|
20
|
+
footerGradient: '#10B981',
|
|
21
|
+
headerGradients: ['#D1FAE5', '#ECFDF5'],
|
|
22
|
+
headerUrl: 'url(#valid_header)',
|
|
23
|
+
footerUrl: 'url(#valid_footer)',
|
|
24
|
+
},
|
|
25
|
+
warning: {
|
|
26
|
+
primary: '#CA8A04',
|
|
27
|
+
footerGradient: '#EAB308',
|
|
28
|
+
headerGradients: ['#FEF9C3', '#FEFCE8'],
|
|
29
|
+
headerUrl: 'url(#warning_header)',
|
|
30
|
+
footerUrl: 'url(#warning_footer)',
|
|
31
|
+
},
|
|
32
|
+
invalid: {
|
|
33
|
+
primary: '#DC2626',
|
|
34
|
+
footerGradient: '#EF4444',
|
|
35
|
+
headerGradients: ['#FEE2E2', '#FEF2F2'],
|
|
36
|
+
headerUrl: 'url(#invalid_header)',
|
|
37
|
+
footerUrl: 'url(#invalid_footer)',
|
|
38
|
+
}
|
|
39
|
+
}
|
|
3
40
|
class _16PF93 extends Profile {
|
|
4
41
|
// Number of pages
|
|
5
42
|
static pages = 1;
|
|
6
43
|
|
|
7
44
|
// Labels of the sample
|
|
8
45
|
labels = {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
46
|
+
L1_1: { eng: "a_value", down: "مردمگریزی", top: "مردمآمیزی" , max: 20},
|
|
47
|
+
L1_2: {eng: "a_raw"},
|
|
48
|
+
L2_1: { eng: "b_value", down: "استدلال عینی", top: "استدلال انتزاعی" , max: 13},
|
|
49
|
+
L2_2: {eng: "b_raw"},
|
|
50
|
+
L3_1: { eng: "c_value", down: "ناپایداری هیجانی", top: "پایداری هیجانی" , max: 26},
|
|
51
|
+
L3_2: {eng: "c_raw"},
|
|
52
|
+
L4_1: { eng: "e_value", down: "سلطهپذیری", top: "سلطهگری" , max: 26},
|
|
53
|
+
L4_2: {eng: "e_raw"},
|
|
54
|
+
L5_1: { eng: "f_value", down: "دلمردگی", top: "سرزندگی" , max: 26},
|
|
55
|
+
L5_2: {eng: "f_raw"},
|
|
56
|
+
L6_1: { eng: "g_value", down: "مصلحتگرا", top: "باوجدان" , max: 20},
|
|
57
|
+
L6_2: {eng: "g_raw"},
|
|
58
|
+
L7_1: { eng: "h_value", down: "ترسو", top: "جسور" , max: 26},
|
|
59
|
+
L7_2: {eng: "h_raw"},
|
|
60
|
+
L8_1: { eng: "i_value", down: "یکدنده", top: "حساس" , max: 20},
|
|
61
|
+
L8_2: {eng: "i_raw"},
|
|
62
|
+
L9_1: { eng: "l_value", down: "زودباور", top: "شکاک" , max: 20},
|
|
63
|
+
L9_2: {eng: "l_raw"},
|
|
64
|
+
L10_1: { eng: "m_value", down: "عملگرا", top: "کولیباز" , max: 26},
|
|
65
|
+
L10_2: {eng: "m_raw"},
|
|
66
|
+
L11_1: { eng: "n_value", down: "بیظرافت", top: "ظرافت" , max: 20},
|
|
67
|
+
L11_2: {eng: "n_raw"},
|
|
68
|
+
L12_1: { eng: "o_value", down: "اطمینان به خود", top: "مستعد احساس گناه" , max: 26},
|
|
69
|
+
L12_2: {eng: "o_raw"},
|
|
70
|
+
L13_1: { eng: "q1_value", down: "محافظهکار", top: "بنیادگرا" , max: 20},
|
|
71
|
+
L13_2: {eng: "q1_raw"},
|
|
72
|
+
L14_1: { eng: "q2_value", down: "متکی به دیگران", top: "مسلط بر خود" , max: 20},
|
|
73
|
+
L14_2: {eng: "q2_raw"},
|
|
74
|
+
L15_1: { eng: "q3_value", down: "اختلالمدار", top: "کمالگرا" , max: 20},
|
|
75
|
+
L15_2: {eng: "q3_raw"},
|
|
76
|
+
L16_1: { eng: "q4_value", down: "آرام", top: "اضطراب" , max: 26},
|
|
77
|
+
L16_2: {eng: "q4_raw"},
|
|
78
|
+
L17: { eng: "b_count"},
|
|
79
|
+
L18: { eng: "status"},
|
|
80
|
+
L19: { eng: "extraversion", fr: "برونگرایی" },
|
|
81
|
+
L20: { eng: "anxiety", fr: "اضطراب" },
|
|
82
|
+
L21: { eng: "flexibility", fr: "یکدندگی" },
|
|
83
|
+
L22: { eng: "independence", fr: "استقلال" },
|
|
84
|
+
L23: { eng: "selfcontrol", fr: "کنترل بالا" },
|
|
85
|
+
L24: { eng: "adjustment", fr: "سازگاری" },
|
|
86
|
+
L25: { eng: "leadership", fr: "قدرت رهبری" },
|
|
87
|
+
L26: { eng: "creativity", fr: "خلاقیت" },
|
|
34
88
|
};
|
|
35
89
|
|
|
36
90
|
profileSpec = {
|
|
@@ -40,7 +94,7 @@ class _16PF93 extends Profile {
|
|
|
40
94
|
sample: {
|
|
41
95
|
name: "پرسشنامه شخصیت کتل" /* Name of the sample */,
|
|
42
96
|
multiProfile: false /* Whether the sample has multiple profiles or not */,
|
|
43
|
-
questions:
|
|
97
|
+
questions: true /* Determines whether to get questions from inital dataset or not */,
|
|
44
98
|
defaultFields: true /* Determines whether to have default prerequisites in the profile or not */,
|
|
45
99
|
fields: [] /* In case you want to get some additional fields and show in the profile */,
|
|
46
100
|
},
|
|
@@ -49,67 +103,13 @@ class _16PF93 extends Profile {
|
|
|
49
103
|
profile: {
|
|
50
104
|
get dimensions() {
|
|
51
105
|
return {
|
|
52
|
-
width:
|
|
53
|
-
height:
|
|
106
|
+
width: 827 + 2 * this.padding.x,
|
|
107
|
+
height: 694 + 2 * this.padding.y,
|
|
54
108
|
};
|
|
55
109
|
},
|
|
56
110
|
padding: {
|
|
57
|
-
x:
|
|
58
|
-
y:
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
items: {
|
|
62
|
-
minValue: 1,
|
|
63
|
-
maxValue: 10,
|
|
64
|
-
offsetY: 33.8,
|
|
65
|
-
widthCoeff: 16.2,
|
|
66
|
-
fillAndOpacity: {
|
|
67
|
-
1: { fill: "#1D4ED8", opacity: 1 },
|
|
68
|
-
2: { fill: "#1D4ED8", opacity: 0.9 },
|
|
69
|
-
3: { fill: "#1D4ED8", opacity: 0.8 },
|
|
70
|
-
4: { fill: "#1D4ED8", opacity: 0.7 },
|
|
71
|
-
5: { fill: "#9CA3AF", opacity: 1 },
|
|
72
|
-
6: { fill: "#9CA3AF", opacity: 1 },
|
|
73
|
-
7: { fill: "#0E7490", opacity: 0.7 },
|
|
74
|
-
8: { fill: "#0E7490", opacity: 0.8 },
|
|
75
|
-
9: { fill: "#0E7490", opacity: 0.9 },
|
|
76
|
-
10: { fill: "#0E7490", opacity: 1 },
|
|
77
|
-
},
|
|
78
|
-
label: {
|
|
79
|
-
offsetX: 16.2,
|
|
80
|
-
},
|
|
81
|
-
},
|
|
82
|
-
gaugeItems: {
|
|
83
|
-
maxValues: {
|
|
84
|
-
[this.labels.L17.eng]: 12.3,
|
|
85
|
-
[this.labels.L18.eng]: 8.9,
|
|
86
|
-
[this.labels.L19.eng]: { مرد: 7.2, زن: 8.6 },
|
|
87
|
-
[this.labels.L20.eng]: { مرد: 13.2, زن: 12.7 },
|
|
88
|
-
[this.labels.L21.eng]: 10.9,
|
|
89
|
-
[this.labels.L22.eng]: 14.3,
|
|
90
|
-
[this.labels.L23.eng]: 13.2,
|
|
91
|
-
[this.labels.L24.eng]: 16.8,
|
|
92
|
-
},
|
|
93
|
-
offsetX: 83.25,
|
|
94
|
-
circle: {
|
|
95
|
-
R: 29.7,
|
|
96
|
-
r: 20,
|
|
97
|
-
brs: {
|
|
98
|
-
tl: 0,
|
|
99
|
-
bl: 0,
|
|
100
|
-
tr: 0,
|
|
101
|
-
br: 0,
|
|
102
|
-
},
|
|
103
|
-
angles: {
|
|
104
|
-
start: FS.toRadians(-90),
|
|
105
|
-
end: FS.toRadians(269.9),
|
|
106
|
-
},
|
|
107
|
-
direction: false /* Clockwise direction for the items gauge element */,
|
|
108
|
-
get totalAngle() {
|
|
109
|
-
return this.direction
|
|
110
|
-
? 2 * Math.PI - (this.angles.end - this.angles.start)
|
|
111
|
-
: this.angles.end - this.angles.start;
|
|
112
|
-
},
|
|
111
|
+
x: 38,
|
|
112
|
+
y: 30,
|
|
113
113
|
},
|
|
114
114
|
},
|
|
115
115
|
/* "labels" part which has to be provided for each profile */
|
|
@@ -123,36 +123,58 @@ class _16PF93 extends Profile {
|
|
|
123
123
|
|
|
124
124
|
_calcContext() {
|
|
125
125
|
const {
|
|
126
|
-
spec: { parameters: spec },
|
|
127
126
|
dataset,
|
|
128
127
|
} = this;
|
|
129
128
|
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
const status = dataset.score.pop().mark;
|
|
133
|
-
|
|
134
|
-
const genderValue = dataset.info.fields.find((f) => f["eng"] === "gender").value;
|
|
129
|
+
const factors = []
|
|
135
130
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
131
|
+
for(let i = 0; i < 32; i+= 2){
|
|
132
|
+
const item = dataset.score[i]
|
|
133
|
+
const fi = item.label.eng.split('_')[0]
|
|
134
|
+
factors.push({
|
|
135
|
+
mark: item.mark ?? 0,
|
|
136
|
+
lable: {
|
|
137
|
+
...item.label,
|
|
138
|
+
eng: fi.toUpperCase(),
|
|
139
|
+
raw: dataset.score[i + 1].mark ?? 0,
|
|
140
|
+
style: rowStyle[item.mark ?? 0]
|
|
141
|
+
}
|
|
142
|
+
})
|
|
143
|
+
}
|
|
142
144
|
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
145
|
+
const finalQuestion = dataset.questions[dataset.questions.length - 1]
|
|
146
|
+
const final = {
|
|
147
|
+
mark: parseInt(finalQuestion.user_answered),
|
|
148
|
+
text: finalQuestion.answer.options[parseInt(finalQuestion.user_answered) - 1],
|
|
149
|
+
type: parseInt(finalQuestion.user_answered) === 1 ? 'valid' : 'invalid',
|
|
150
|
+
textType: parseInt(finalQuestion.user_answered) === 1 ? 'معتبر' : 'نامعتبر'
|
|
151
|
+
}
|
|
152
|
+
final.style = alertStyle[final.type]
|
|
153
|
+
const bCount = {
|
|
154
|
+
mark: dataset.score[32].mark,
|
|
155
|
+
type: 'valid',
|
|
156
|
+
text: 'معتبر'
|
|
157
|
+
}
|
|
158
|
+
if(dataset.score[32].mark >= 59){
|
|
159
|
+
bCount.text = 'نامعتبر'
|
|
160
|
+
bCount.type = 'invalid'
|
|
161
|
+
}else if(dataset.score[32].mark >= 30){
|
|
162
|
+
bCount.text = 'تفسیر با احتیاط'
|
|
163
|
+
bCount.type = 'warning'
|
|
164
|
+
}
|
|
165
|
+
bCount.style = alertStyle[bCount.type]
|
|
166
|
+
const secondary = dataset.score.slice(34, 44).map((item, i) => {
|
|
167
|
+
item.value = item.mark.toString().replace('.', ',')
|
|
168
|
+
item.mark = Math.min(Math.max(item.mark, 0), 10)
|
|
169
|
+
item.label.max = 10
|
|
170
|
+
item.circle = gauge(item, -90, 270)
|
|
171
|
+
const row = Math.floor(i / 2)
|
|
172
|
+
const col = i % 2 === 0 ? 1 : 0
|
|
173
|
+
item.position = [col, row]
|
|
174
|
+
return item
|
|
175
|
+
})
|
|
176
|
+
// const pathX = generatePiePath(-90, 0, 36, 10.8);
|
|
177
|
+
return [{ factors, final, bCount, alertStyle, secondary }];
|
|
155
178
|
}
|
|
156
179
|
}
|
|
157
|
-
|
|
158
180
|
module.exports = _16PF93;
|
package/src/samples/16PF9A.js
CHANGED
|
@@ -1,36 +1,82 @@
|
|
|
1
|
-
const { Profile
|
|
1
|
+
const { Profile } = require("../Profile");
|
|
2
|
+
const rowStyle = [
|
|
3
|
+
['#1D4ED8', 1],
|
|
4
|
+
['#1D4ED8', 0.9],
|
|
5
|
+
['#1D4ED8', 0.8],
|
|
6
|
+
['#1D4ED8', 0.7],
|
|
2
7
|
|
|
8
|
+
['#94A3B8', 0.8],
|
|
9
|
+
['#D1D5DB', 1],
|
|
10
|
+
['#94A3B8', 0.8],
|
|
11
|
+
|
|
12
|
+
['#0E7490', 0.7],
|
|
13
|
+
['#0E7490', 0.8],
|
|
14
|
+
['#0E7490', 0.9],
|
|
15
|
+
['#0E7490', 1],
|
|
16
|
+
]
|
|
17
|
+
const alertStyle = {
|
|
18
|
+
valid: {
|
|
19
|
+
primary: '#059669',
|
|
20
|
+
footerGradient: '#10B981',
|
|
21
|
+
headerGradients: ['#D1FAE5', '#ECFDF5'],
|
|
22
|
+
headerUrl: 'url(#valid_header)',
|
|
23
|
+
footerUrl: 'url(#valid_footer)',
|
|
24
|
+
},
|
|
25
|
+
warning: {
|
|
26
|
+
primary: '#CA8A04',
|
|
27
|
+
footerGradient: '#EAB308',
|
|
28
|
+
headerGradients: ['#FEF9C3', '#FEFCE8'],
|
|
29
|
+
headerUrl: 'url(#warning_header)',
|
|
30
|
+
footerUrl: 'url(#warning_footer)',
|
|
31
|
+
},
|
|
32
|
+
invalid: {
|
|
33
|
+
primary: '#DC2626',
|
|
34
|
+
footerGradient: '#EF4444',
|
|
35
|
+
headerGradients: ['#FEE2E2', '#FEF2F2'],
|
|
36
|
+
headerUrl: 'url(#invalid_header)',
|
|
37
|
+
footerUrl: 'url(#invalid_footer)',
|
|
38
|
+
}
|
|
39
|
+
}
|
|
3
40
|
class _16PF9A extends Profile {
|
|
4
41
|
// Number of pages
|
|
5
42
|
static pages = 1;
|
|
6
43
|
|
|
7
44
|
// Labels of the sample
|
|
8
45
|
labels = {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
46
|
+
L1_1: { eng: "a_value", down: "سردبرخورد - قاطع - بیتفاوت", top: "گرمبرخورد - اهل معاشرت - اجتماعی" , title: "گرمبرخوردی", max: 20},
|
|
47
|
+
L1_2: {eng: "a_raw"},
|
|
48
|
+
L2_1: { eng: "b_value", down: "عینی - سرعت یادگیری پایین", top: "انتزاعی - سرعت یادگیری بالا" , title: "هوش کلی", max: 13},
|
|
49
|
+
L2_2: {eng: "b_raw"},
|
|
50
|
+
L3_1: { eng: "c_value", down: "ثبات هیجانی پایین - بیتوجه", top: "ثبات هیجانی بالا - پخته - واقعنگر" , title: "پایداری هیجانی", max: 26},
|
|
51
|
+
L3_2: {eng: "c_raw"},
|
|
52
|
+
L4_1: { eng: "e_value", down: "سلطهپذیر - وابسته - ملایم", top: "سلطهگر - روحیهی مستقل - خشن" , title: "سلطه", max: 26},
|
|
53
|
+
L4_2: {eng: "e_raw"},
|
|
54
|
+
L5_1: { eng: "f_value", down: "جدی - دلمرده - محتاط", top: "سرزنده - پرشور - پرحرف" , title: "سرزندگی", max: 26},
|
|
55
|
+
L5_2: {eng: "f_raw"},
|
|
56
|
+
L6_1: { eng: "g_value", down: "پایبندی پایین - ناپایدار", top: "قانونمدار - وظیفهشناس" , title: "پایبندی به قوانین", max: 20},
|
|
57
|
+
L6_2: {eng: "g_raw"},
|
|
58
|
+
L7_1: { eng: "h_value", down: "کمرو", top: "اهل ریسک - باجسارت" , title: "ریسک اجتماعی", max: 26},
|
|
59
|
+
L7_2: {eng: "h_raw"},
|
|
60
|
+
L8_1: { eng: "i_value", down: "خودکفا - متواضع - واقعنگر", top: "بیصبر - متوقع - خیالباف" , title: "حساسیت هیجانی", max: 20},
|
|
61
|
+
L8_2: {eng: "i_raw"},
|
|
62
|
+
L9_1: { eng: "l_value", down: "اعتمادبرانگیز", top: "بیاعتماد - بدبین" , title: "اعتماد اجتماعی", max: 20},
|
|
63
|
+
L9_2: {eng: "l_raw"},
|
|
64
|
+
L10_1: { eng: "m_value", down: "اهل عمل", top: "غرق در افکار - کماطمینان" , title: "عملگرایی", max: 26},
|
|
65
|
+
L10_2: {eng: "m_raw"},
|
|
66
|
+
L11_1: { eng: "n_value", down: "زمخت", top: "زیرک - هشیاری اجتماعی" , title: "ظرافت", max: 20},
|
|
67
|
+
L11_2: {eng: "n_raw"},
|
|
68
|
+
L12_1: { eng: "o_value", down: "آرام - اطمینان به خود", top: "بیمناک - اضطراب ناشی از احساس گناه" , title: "احساس گناه", max: 26},
|
|
69
|
+
L12_2: {eng: "o_raw"},
|
|
70
|
+
L13_1: { eng: "q1_value", down: "محافظهکار", top: "رادیکال" , title: "گشودگی به تغییر", max: 20},
|
|
71
|
+
L13_2: {eng: "q1_raw"},
|
|
72
|
+
L14_1: { eng: "q2_value", down: "گروهمدار - تابع آداب", top: "خودکفا - مصمم - خوشفکر" , title: "متکی به خود", max: 20},
|
|
73
|
+
L14_2: {eng: "q2_raw"},
|
|
74
|
+
L15_1: { eng: "q3_value", down: "فاقد تصویر روشن از خود", top: "هشیار نسبت به خود" , title: "سازگاری", max: 20},
|
|
75
|
+
L15_2: {eng: "q3_raw"},
|
|
76
|
+
L16_1: { eng: "q4_value", down: "آرام - خوددار", top: "انرژی بالا - تنش عصبی" , title: "تنش", max: 26},
|
|
77
|
+
L16_2: {eng: "q4_raw"},
|
|
78
|
+
L17: { eng: "b_count"},
|
|
79
|
+
L18: { eng: "status"},
|
|
34
80
|
};
|
|
35
81
|
|
|
36
82
|
profileSpec = {
|
|
@@ -40,7 +86,7 @@ class _16PF9A extends Profile {
|
|
|
40
86
|
sample: {
|
|
41
87
|
name: "پرسشنامه شخصیت کتل" /* Name of the sample */,
|
|
42
88
|
multiProfile: false /* Whether the sample has multiple profiles or not */,
|
|
43
|
-
questions:
|
|
89
|
+
questions: true /* Determines whether to get questions from inital dataset or not */,
|
|
44
90
|
defaultFields: true /* Determines whether to have default prerequisites in the profile or not */,
|
|
45
91
|
fields: [] /* In case you want to get some additional fields and show in the profile */,
|
|
46
92
|
},
|
|
@@ -49,34 +95,13 @@ class _16PF9A extends Profile {
|
|
|
49
95
|
profile: {
|
|
50
96
|
get dimensions() {
|
|
51
97
|
return {
|
|
52
|
-
width:
|
|
53
|
-
height:
|
|
98
|
+
width: 826 + 2 * this.padding.x,
|
|
99
|
+
height: 694 + 2 * this.padding.y,
|
|
54
100
|
};
|
|
55
101
|
},
|
|
56
102
|
padding: {
|
|
57
|
-
x:
|
|
58
|
-
y:
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
items: {
|
|
62
|
-
minValue: 1,
|
|
63
|
-
maxValue: 10,
|
|
64
|
-
offsetY: 33.8,
|
|
65
|
-
widthCoeff: 16.2,
|
|
66
|
-
fillAndOpacity: {
|
|
67
|
-
1: { fill: "#1D4ED8", opacity: 1 },
|
|
68
|
-
2: { fill: "#1D4ED8", opacity: 0.9 },
|
|
69
|
-
3: { fill: "#1D4ED8", opacity: 0.8 },
|
|
70
|
-
4: { fill: "#1D4ED8", opacity: 0.7 },
|
|
71
|
-
5: { fill: "#9CA3AF", opacity: 1 },
|
|
72
|
-
6: { fill: "#9CA3AF", opacity: 1 },
|
|
73
|
-
7: { fill: "#0E7490", opacity: 0.7 },
|
|
74
|
-
8: { fill: "#0E7490", opacity: 0.8 },
|
|
75
|
-
9: { fill: "#0E7490", opacity: 0.9 },
|
|
76
|
-
10: { fill: "#0E7490", opacity: 1 },
|
|
77
|
-
},
|
|
78
|
-
label: {
|
|
79
|
-
offsetX: 16.2,
|
|
103
|
+
x: 39,
|
|
104
|
+
y: 30,
|
|
80
105
|
},
|
|
81
106
|
},
|
|
82
107
|
/* "labels" part which has to be provided for each profile */
|
|
@@ -90,24 +115,45 @@ class _16PF9A extends Profile {
|
|
|
90
115
|
|
|
91
116
|
_calcContext() {
|
|
92
117
|
const {
|
|
93
|
-
spec: { parameters: spec },
|
|
94
118
|
dataset,
|
|
95
119
|
} = this;
|
|
96
120
|
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
121
|
+
const factors = []
|
|
122
|
+
for(let i = 0; i < 32; i+= 2){
|
|
123
|
+
const item = dataset.score[i]
|
|
124
|
+
const fi = item.label.eng.split('_')[0]
|
|
125
|
+
factors.push({
|
|
126
|
+
mark: item.mark ?? 0,
|
|
127
|
+
lable: {
|
|
128
|
+
...item.label,
|
|
129
|
+
eng: fi.toUpperCase(),
|
|
130
|
+
raw: dataset.score[i + 1].mark ?? 0,
|
|
131
|
+
style: rowStyle[item.mark ?? 0]
|
|
132
|
+
}
|
|
133
|
+
})
|
|
134
|
+
}
|
|
135
|
+
const finalQuestion = dataset.questions[dataset.questions.length - 1]
|
|
136
|
+
const final = {
|
|
137
|
+
mark: parseInt(finalQuestion.user_answered),
|
|
138
|
+
text: finalQuestion.answer.options[parseInt(finalQuestion.user_answered) - 1],
|
|
139
|
+
type: parseInt(finalQuestion.user_answered) === 1 ? 'valid' : 'invalid',
|
|
140
|
+
textType: parseInt(finalQuestion.user_answered) === 1 ? 'معتبر' : 'نامعتبر'
|
|
141
|
+
}
|
|
142
|
+
final.style = alertStyle[final.type]
|
|
143
|
+
const bCount = {
|
|
144
|
+
mark: dataset.score[32].mark,
|
|
145
|
+
type: 'valid',
|
|
146
|
+
text: 'معتبر'
|
|
147
|
+
}
|
|
148
|
+
if(dataset.score[32].mark >= 59){
|
|
149
|
+
bCount.text = 'نامعتبر'
|
|
150
|
+
bCount.type = 'invalid'
|
|
151
|
+
}else if(dataset.score[32].mark >= 30){
|
|
152
|
+
bCount.text = 'تفسیر با احتیاط'
|
|
153
|
+
bCount.type = 'warning'
|
|
154
|
+
}
|
|
155
|
+
bCount.style = alertStyle[bCount.type]
|
|
156
|
+
return [{ factors, final, bCount, alertStyle }];
|
|
111
157
|
}
|
|
112
158
|
}
|
|
113
159
|
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
const { Profile, FS } = require("../Profile");
|
|
2
|
+
|
|
3
|
+
class _16PFOld93 extends Profile {
|
|
4
|
+
// Number of pages
|
|
5
|
+
static pages = 1;
|
|
6
|
+
|
|
7
|
+
// Labels of the sample
|
|
8
|
+
labels = {
|
|
9
|
+
L1: { eng: "a", fr: "A", right: "مردمگریزی", left: "مردمآمیزی" },
|
|
10
|
+
L2: { eng: "b", fr: "B", right: "استدلال عینی", left: "استدلال انتزاعی" },
|
|
11
|
+
L3: { eng: "c", fr: "C", right: "ناپایداری هیجانی", left: "پایداری هیجانی" },
|
|
12
|
+
L4: { eng: "e", fr: "E", right: "سلطهپذیری", left: "سلطهگری" },
|
|
13
|
+
L5: { eng: "f", fr: "F", right: "دلمردگی", left: "سرزندگی" },
|
|
14
|
+
L6: { eng: "g", fr: "G", right: "مصلحتگرا", left: "باوجدان" },
|
|
15
|
+
L7: { eng: "h", fr: "H", right: "ترسو", left: "جسور" },
|
|
16
|
+
L8: { eng: "i", fr: "I", right: "یکدنده", left: "حساس" },
|
|
17
|
+
L9: { eng: "l", fr: "L", right: "زودباور", left: "شکاک" },
|
|
18
|
+
L10: { eng: "m", fr: "M", right: "عملگرا", left: "کولیباز" },
|
|
19
|
+
L11: { eng: "n", fr: "N", right: "بیظرافت", left: "ظرافتکاری" },
|
|
20
|
+
L12: { eng: "o", fr: "O", right: "اطمینان به خود", left: "مستعد احساس گناه" },
|
|
21
|
+
L13: { eng: "q1", fr: "Q1", right: "محافظهکار", left: "بنیادگرا" },
|
|
22
|
+
L14: { eng: "q2", fr: "Q2", right: "متکی به دیگران", left: "مسلط بر خود" },
|
|
23
|
+
L15: { eng: "q3", fr: "Q3", right: "اختلالمدار", left: "کمالگرا" },
|
|
24
|
+
L16: { eng: "q4", fr: "Q4", right: "آرام", left: "اضطراب" },
|
|
25
|
+
L17: { eng: "extraversion", fr: "برونگرایی" },
|
|
26
|
+
L18: { eng: "anxiety", fr: "اضطراب" },
|
|
27
|
+
L19: { eng: "flexibility", fr: "یکدندگی" },
|
|
28
|
+
L20: { eng: "independence", fr: "استقلال" },
|
|
29
|
+
L21: { eng: "selfcontrol", fr: "کنترل بالا" },
|
|
30
|
+
L22: { eng: "adjustment", fr: "سازگاری" },
|
|
31
|
+
L23: { eng: "leadership", fr: "قدرت رهبری" },
|
|
32
|
+
L24: { eng: "creativity", fr: "خلاقیت" },
|
|
33
|
+
L25: { eng: "status", fr: "وضعیت" },
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
profileSpec = {
|
|
37
|
+
/* "sample" determines some important info about the sample and profile */
|
|
38
|
+
/* Default prerequisites: 1. gender, 2. age, 3. education */
|
|
39
|
+
/* "prerequisites" is synonym to "fields" in our program */
|
|
40
|
+
sample: {
|
|
41
|
+
name: "پرسشنامه شخصیت کتل" /* Name of the sample */,
|
|
42
|
+
multiProfile: false /* Whether the sample has multiple profiles or not */,
|
|
43
|
+
questions: false /* Determines whether to get questions from inital dataset or not */,
|
|
44
|
+
defaultFields: true /* Determines whether to have default prerequisites in the profile or not */,
|
|
45
|
+
fields: [] /* In case you want to get some additional fields and show in the profile */,
|
|
46
|
+
},
|
|
47
|
+
/* "profile" determines the dimensions of the drawn profile (to be used in svg tag viewbox) */
|
|
48
|
+
/* calculating its dimensions carefully is of great importance */
|
|
49
|
+
profile: {
|
|
50
|
+
get dimensions() {
|
|
51
|
+
return {
|
|
52
|
+
width: 610 + 2 * this.padding.x,
|
|
53
|
+
height: 682 + 2 * this.padding.y,
|
|
54
|
+
};
|
|
55
|
+
},
|
|
56
|
+
padding: {
|
|
57
|
+
x: 0,
|
|
58
|
+
y: 16.8,
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
items: {
|
|
62
|
+
minValue: 1,
|
|
63
|
+
maxValue: 10,
|
|
64
|
+
offsetY: 33.8,
|
|
65
|
+
widthCoeff: 16.2,
|
|
66
|
+
fillAndOpacity: {
|
|
67
|
+
1: { fill: "#1D4ED8", opacity: 1 },
|
|
68
|
+
2: { fill: "#1D4ED8", opacity: 0.9 },
|
|
69
|
+
3: { fill: "#1D4ED8", opacity: 0.8 },
|
|
70
|
+
4: { fill: "#1D4ED8", opacity: 0.7 },
|
|
71
|
+
5: { fill: "#9CA3AF", opacity: 1 },
|
|
72
|
+
6: { fill: "#9CA3AF", opacity: 1 },
|
|
73
|
+
7: { fill: "#0E7490", opacity: 0.7 },
|
|
74
|
+
8: { fill: "#0E7490", opacity: 0.8 },
|
|
75
|
+
9: { fill: "#0E7490", opacity: 0.9 },
|
|
76
|
+
10: { fill: "#0E7490", opacity: 1 },
|
|
77
|
+
},
|
|
78
|
+
label: {
|
|
79
|
+
offsetX: 16.2,
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
gaugeItems: {
|
|
83
|
+
maxValues: {
|
|
84
|
+
[this.labels.L17.eng]: 12.3,
|
|
85
|
+
[this.labels.L18.eng]: 8.9,
|
|
86
|
+
[this.labels.L19.eng]: { مرد: 7.2, زن: 8.6 },
|
|
87
|
+
[this.labels.L20.eng]: { مرد: 13.2, زن: 12.7 },
|
|
88
|
+
[this.labels.L21.eng]: 10.9,
|
|
89
|
+
[this.labels.L22.eng]: 14.3,
|
|
90
|
+
[this.labels.L23.eng]: 13.2,
|
|
91
|
+
[this.labels.L24.eng]: 16.8,
|
|
92
|
+
},
|
|
93
|
+
offsetX: 83.25,
|
|
94
|
+
circle: {
|
|
95
|
+
R: 29.7,
|
|
96
|
+
r: 20,
|
|
97
|
+
brs: {
|
|
98
|
+
tl: 0,
|
|
99
|
+
bl: 0,
|
|
100
|
+
tr: 0,
|
|
101
|
+
br: 0,
|
|
102
|
+
},
|
|
103
|
+
angles: {
|
|
104
|
+
start: FS.toRadians(-90),
|
|
105
|
+
end: FS.toRadians(269.9),
|
|
106
|
+
},
|
|
107
|
+
direction: false /* Clockwise direction for the items gauge element */,
|
|
108
|
+
get totalAngle() {
|
|
109
|
+
return this.direction
|
|
110
|
+
? 2 * Math.PI - (this.angles.end - this.angles.start)
|
|
111
|
+
: this.angles.end - this.angles.start;
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
/* "labels" part which has to be provided for each profile */
|
|
116
|
+
labels: Object.values(this.labels),
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
constructor(dataset, options, config = {}) {
|
|
120
|
+
super();
|
|
121
|
+
this._init(dataset, options, config);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
_calcContext() {
|
|
125
|
+
const {
|
|
126
|
+
spec: { parameters: spec },
|
|
127
|
+
dataset,
|
|
128
|
+
} = this;
|
|
129
|
+
|
|
130
|
+
const { items: itemsSpec, gaugeItems: gaugeItemsSpec } = spec;
|
|
131
|
+
|
|
132
|
+
const status = dataset.score.pop().mark;
|
|
133
|
+
|
|
134
|
+
const genderValue = dataset.info.fields.find((f) => f["eng"] === "gender").value;
|
|
135
|
+
|
|
136
|
+
const items = dataset.score.slice(0, 16).map((data) => ({
|
|
137
|
+
label: data.label,
|
|
138
|
+
mark: data.mark,
|
|
139
|
+
offset: (data.mark - 1) * itemsSpec.widthCoeff,
|
|
140
|
+
...itemsSpec.fillAndOpacity[data.mark],
|
|
141
|
+
}));
|
|
142
|
+
|
|
143
|
+
const gaugeItems = dataset.score.slice(16).map((data) => {
|
|
144
|
+
let maxValue = gaugeItemsSpec.maxValues[data.label.eng];
|
|
145
|
+
maxValue = typeof maxValue === "object" ? maxValue[genderValue] : maxValue;
|
|
146
|
+
|
|
147
|
+
return {
|
|
148
|
+
label: data.label,
|
|
149
|
+
mark: data.mark,
|
|
150
|
+
zeta: (data.mark / maxValue) * gaugeItemsSpec.circle.totalAngle + gaugeItemsSpec.circle.angles.start,
|
|
151
|
+
};
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
return [{ items, status, gaugeItems }];
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
module.exports = _16PFOld93;
|