@baravak/risloo-profile-cli 3.4.0 → 3.5.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.
@@ -0,0 +1,470 @@
1
+ const { Profile, FS } = require("../Profile");
2
+
3
+ class EPQ93 extends Profile {
4
+ // Number of pages
5
+ static pages = 1;
6
+
7
+ // Labels of the sample
8
+ labels = {
9
+ L1: { eng: "psychoticism", fr: "روان‌گسسته‌گرایی", code: "P", maxValue: 25, fill: "#CA8A04" },
10
+ L2: { eng: "extraversion", fr: "برون‌گرایی", code: "E", maxValue: 21, fill: "#0891B2" },
11
+ L3: { eng: "neuroticism", fr: "روان‌آزرده‌گرایی", code: "N", maxValue: 23, fill: "#4F46E5" },
12
+ L4: { eng: "lie", fr: "دروغ", code: "L", maxValue: 21, fill: "#E11D48" },
13
+ };
14
+
15
+ profileSpec = {
16
+ /* "sample" determines some important info about the sample and profile */
17
+ /* Default prerequisites: 1. gender, 2. age, 3. education */
18
+ /* "prerequisites" is synonym to "fields" in our program */
19
+ sample: {
20
+ name: "پرسشنامه شخصیت آیسنک بزرگسالان" /* Name of the sample */,
21
+ multiProfile: false /* Whether the sample has multiple profiles or not */,
22
+ questions: false /* Determines whether to get questions from inital dataset or not */,
23
+ defaultFields: true /* Determines whether to have default prerequisites in the profile or not */,
24
+ fields: [] /* In case you want to get some additional fields and show in the profile */,
25
+ },
26
+ /* "profile" determines the dimensions of the drawn profile (to be used in svg tag viewbox) */
27
+ /* calculating its dimensions carefully is of great importance */
28
+ profile: {
29
+ get dimensions() {
30
+ return {
31
+ width: 792 + 2 * this.padding.x,
32
+ height: 633 + 2 * this.padding.y,
33
+ };
34
+ },
35
+ padding: {
36
+ x: 55.5,
37
+ y: 40.5,
38
+ },
39
+ },
40
+ item: {
41
+ circle: {
42
+ R: 70 /* Radius of the outer circle of the raw element */,
43
+ r: 49 /* Radius of the inner circle of the raw element */,
44
+ brs: {
45
+ tl: 6 /* Top left border radius */,
46
+ bl: 6 /* Bottom left border radius */,
47
+ tr: 6 /* Top right border radius */,
48
+ br: 6 /* Bottom right border radius */,
49
+ } /* Border radiuses at each end of the gauge of the raw element */,
50
+ angles: {
51
+ start: FS.toRadians(-90),
52
+ end: FS.toRadians(180),
53
+ } /* Angles of each end of the raw element */,
54
+ direction: false /* Clockwise direction for the raw gauge element */,
55
+ get totalAngle() {
56
+ return this.direction
57
+ ? 2 * Math.PI - (this.angles.end - this.angles.start)
58
+ : this.angles.end - this.angles.start;
59
+ },
60
+ },
61
+ ticks: {
62
+ num: 2 /* Number of ticks */,
63
+ number: {
64
+ offset: 12 /* Offset from the line */,
65
+ },
66
+ },
67
+ },
68
+ /* "labels" part which has to be provided for each profile */
69
+ labels: Object.values(this.labels),
70
+ };
71
+
72
+ col9 = false;
73
+
74
+ constructor(dataset, options, config = {}) {
75
+ super();
76
+ let gender = "2";
77
+ for (let i = 0; i < dataset.prerequisites.length; i++) {
78
+ if (dataset.prerequisites[i].label == "gender") {
79
+ gender = dataset.prerequisites[i].user_answered;
80
+ break;
81
+ }
82
+ }
83
+ if (this.constructor.name == "EPQ9A") {
84
+ this.labels.L1.maxValue = 17;
85
+ this.labels.L2.maxValue = 24;
86
+ this.labels.L3.maxValue = 20;
87
+ this.labels.L4.maxValue = 20;
88
+ this.profileSpec.sample.name = "پرسشنامه شخصیت آیسنک کودکان";
89
+ if (gender == "2") {
90
+ this.col9 = true;
91
+ this.profileSpec.profile = {
92
+ get dimensions() {
93
+ return {
94
+ width: 792 + 2 * this.padding.x,
95
+ height: 673 + 2 * this.padding.y,
96
+ };
97
+ },
98
+ padding: {
99
+ x: 55.5,
100
+ y: 20.5,
101
+ },
102
+ };
103
+ }
104
+ }
105
+
106
+ this._init(dataset, options, config);
107
+ }
108
+
109
+ _calcContext() {
110
+ const {
111
+ spec: { parameters: spec },
112
+ dataset,
113
+ } = this;
114
+
115
+ const { item: rawSpec } = spec;
116
+
117
+ const items = dataset.score.reverse().map((item) => {
118
+ const rawTicksNumbers = FS.createArithmeticSequence(
119
+ item.label.maxValue,
120
+ -item.label.maxValue / (rawSpec.ticks.num - 1),
121
+ rawSpec.ticks.num
122
+ ).reverse();
123
+ return {
124
+ label: item.label,
125
+ mark: item.mark,
126
+ zeta: (item.mark / item.label.maxValue) * rawSpec.circle.totalAngle + rawSpec.circle.angles.start,
127
+ ticks: rawTicksNumbers.map((tick) => ({
128
+ number: tick,
129
+ angle: (tick / item.label.maxValue) * rawSpec.circle.totalAngle + rawSpec.circle.angles.start,
130
+ })),
131
+ };
132
+ });
133
+ const table = {
134
+ adult: {
135
+ male: [
136
+ {
137
+ age: "16",
138
+ factors: {
139
+ l: { avg: 11.76, sd: 2.04 },
140
+ n: { avg: 13.71, sd: 2.03 },
141
+ e: { avg: 13.49, sd: 1.64 },
142
+ p: { avg: 6.55, sd: 1.75 },
143
+ },
144
+ },
145
+ {
146
+ age: "17",
147
+ factors: {
148
+ l: { avg: 11.7, sd: 2.9 },
149
+ n: { avg: 12.98, sd: 2.31 },
150
+ e: { avg: 12.95, sd: 1.66 },
151
+ p: { avg: 6.43, sd: 1.5 },
152
+ },
153
+ },
154
+ {
155
+ age: "18",
156
+ factors: {
157
+ l: { avg: 12.28, sd: 2.18 },
158
+ n: { avg: 13.41, sd: 2.3 },
159
+ e: { avg: 12.26, sd: 1.6 },
160
+ p: { avg: 6.02, sd: 2.78 },
161
+ },
162
+ },
163
+ {
164
+ age: "19",
165
+ factors: {
166
+ l: { avg: 11.7, sd: 1.95 },
167
+ n: { avg: 13.6, sd: 2.23 },
168
+ e: { avg: 12.21, sd: 1.27 },
169
+ p: { avg: 6, sd: 1.48 },
170
+ },
171
+ },
172
+ {
173
+ age: "20-29",
174
+ factors: {
175
+ l: { avg: 11.68, sd: 1.99 },
176
+ n: { avg: 12.16, sd: 2.15 },
177
+ e: { avg: 11.72, sd: 1.52 },
178
+ p: { avg: 5.61, sd: 1.98 },
179
+ },
180
+ },
181
+ {
182
+ age: "30-39",
183
+ factors: {
184
+ l: { avg: 12.02, sd: 1.87 },
185
+ n: { avg: 11.7, sd: 1.78 },
186
+ e: { avg: 11.94, sd: 1.43 },
187
+ p: { avg: 7.7, sd: 2.13 },
188
+ },
189
+ },
190
+ {
191
+ age: "40-49",
192
+ factors: {
193
+ l: { avg: 11.24, sd: 3.28 },
194
+ n: { avg: 11.4, sd: 1.82 },
195
+ e: { avg: 11, sd: 1.45 },
196
+ p: { avg: 8.9, sd: 2.03 },
197
+ },
198
+ },
199
+ {
200
+ age: "50-59",
201
+ factors: {
202
+ l: { avg: 10.5, sd: 1.58 },
203
+ n: { avg: 12.51, sd: 1.79 },
204
+ e: { avg: 10.11, sd: 0.4 },
205
+ p: { avg: 5.3, sd: 1.77 },
206
+ },
207
+ },
208
+ ],
209
+ female: [
210
+ {
211
+ age: 16,
212
+ factors: {
213
+ l: { avg: 11.02, sd: 2.35 },
214
+ n: { avg: 14.7, sd: 2.2 },
215
+ e: { avg: 11.6, sd: 1.64 },
216
+ p: { avg: 5.15, sd: 1.58 },
217
+ },
218
+ },
219
+ {
220
+ age: 17,
221
+ factors: {
222
+ l: { avg: 11.92, sd: 1.98 },
223
+ n: { avg: 15.17, sd: 2.02 },
224
+ e: { avg: 12.23, sd: 1.81 },
225
+ p: { avg: 5.05, sd: 1.37 },
226
+ },
227
+ },
228
+ {
229
+ age: 18,
230
+ factors: {
231
+ l: { avg: 11.94, sd: 2.14 },
232
+ n: { avg: 15.66, sd: 2 },
233
+ e: { avg: 12.3, sd: 1.81 },
234
+ p: { avg: 5.39, sd: 1.38 },
235
+ },
236
+ },
237
+ {
238
+ age: 19,
239
+ factors: {
240
+ l: { avg: 12, sd: 2.08 },
241
+ n: { avg: 16.13, sd: 2.02 },
242
+ e: { avg: 12.5, sd: 1.82 },
243
+ p: { avg: 5.34, sd: 1.52 },
244
+ },
245
+ },
246
+ {
247
+ age: "20-29",
248
+ factors: {
249
+ l: { avg: 12.97, sd: 1.98 },
250
+ n: { avg: 14.99, sd: 2.35 },
251
+ e: { avg: 9.89, sd: 1.8 },
252
+ p: { avg: 5.04, sd: 1.35 },
253
+ },
254
+ },
255
+ {
256
+ age: "30-39",
257
+ factors: {
258
+ l: { avg: 13.65, sd: 2.81 },
259
+ n: { avg: 13.79, sd: 5.31 },
260
+ e: { avg: 13.74, sd: 1.55 },
261
+ p: { avg: 4.7, sd: 2.65 },
262
+ },
263
+ },
264
+ {
265
+ age: "40-49",
266
+ factors: {
267
+ l: { avg: 13.85, sd: 3.65 },
268
+ n: { avg: 13.85, sd: 4.5 },
269
+ e: { avg: 12.05, sd: 3.37 },
270
+ p: { avg: 4.88, sd: 2.71 },
271
+ },
272
+ },
273
+ {
274
+ age: "50-59",
275
+ factors: {
276
+ l: { avg: 14.7, sd: 3.82 },
277
+ n: { avg: 13.16, sd: 5.7 },
278
+ e: { avg: 11.26, sd: 3.94 },
279
+ p: { avg: 5.13, sd: 3.24 },
280
+ },
281
+ },
282
+ ],
283
+ },
284
+ children: {
285
+ male: [
286
+ {
287
+ age: 7,
288
+ factors: {
289
+ l: { avg: 15.84, sd: 2.8 },
290
+ n: { avg: 8.84, sd: 4.7 },
291
+ e: { avg: 16.8, sd: 3 },
292
+ p: { avg: 4.3, sd: 3.6 },
293
+ },
294
+ },
295
+ {
296
+ age: 8,
297
+ factors: {
298
+ l: { avg: 16.09, sd: 6.4 },
299
+ n: { avg: 7.96, sd: 3.5 },
300
+ e: { avg: 17.16, sd: 2.7 },
301
+ p: { avg: 3.75, sd: 2.4 },
302
+ },
303
+ },
304
+ {
305
+ age: 9,
306
+ factors: {
307
+ l: { avg: 16.9, sd: 3 },
308
+ n: { avg: 6.44, sd: 3 },
309
+ e: { avg: 16.88, sd: 2.7 },
310
+ p: { avg: 4.68, sd: 3.6 },
311
+ },
312
+ },
313
+ {
314
+ age: 10,
315
+ factors: {
316
+ l: { avg: 15.93, sd: 3.4 },
317
+ n: { avg: 8.35, sd: 3.7 },
318
+ e: { avg: 17.19, sd: 2.9 },
319
+ p: { avg: 3.78, sd: 2 },
320
+ },
321
+ },
322
+ {
323
+ age: 11,
324
+ factors: {
325
+ l: { avg: 16.61, sd: 3.6 },
326
+ n: { avg: 8.9, sd: 3.9 },
327
+ e: { avg: 17.82, sd: 3 },
328
+ p: { avg: 4.22, sd: 2.2 },
329
+ },
330
+ },
331
+ {
332
+ age: 12,
333
+ factors: {
334
+ l: { avg: 14.12, sd: 5 },
335
+ n: { avg: 8.92, sd: 3.9 },
336
+ e: { avg: 17.74, sd: 3 },
337
+ p: { avg: 3.69, sd: 2.5 },
338
+ },
339
+ },
340
+ {
341
+ age: 13,
342
+ factors: {
343
+ l: { avg: 14.02, sd: 4.4 },
344
+ n: { avg: 9.37, sd: 4 },
345
+ e: { avg: 17.33, sd: 3.2 },
346
+ p: { avg: 3.65, sd: 2.4 },
347
+ },
348
+ },
349
+ {
350
+ age: 14,
351
+ factors: {
352
+ l: { avg: 13.23, sd: 4.6 },
353
+ n: { avg: 9.34, sd: 3.5 },
354
+ e: { avg: 17.3, sd: 3 },
355
+ p: { avg: 4.5, sd: 3 },
356
+ },
357
+ },
358
+ {
359
+ age: 15,
360
+ factors: {
361
+ l: { avg: 12.87, sd: 5 },
362
+ n: { avg: 10.12, sd: 3.9 },
363
+ e: { avg: 17.25, sd: 3 },
364
+ p: { avg: 4.18, sd: 3 },
365
+ },
366
+ },
367
+ ],
368
+ female: [
369
+ {
370
+ age: 8,
371
+ factors: {
372
+ l: { avg: 17, sd: 2.5 },
373
+ n: { avg: 6.7, sd: 4.4 },
374
+ e: { avg: 16, sd: 2.9 },
375
+ p: { avg: 3, sd: 3.3 },
376
+ },
377
+ },
378
+ {
379
+ age: 9,
380
+ factors: {
381
+ l: { avg: 16.5, sd: 3.5 },
382
+ n: { avg: 7.6, sd: 3.9 },
383
+ e: { avg: 16, sd: 2.9 },
384
+ p: { avg: 2, sd: 2 },
385
+ },
386
+ },
387
+ {
388
+ age: 10,
389
+ factors: {
390
+ l: { avg: 18, sd: 2.65 },
391
+ n: { avg: 6, sd: 3.7 },
392
+ e: { avg: 13, sd: 3.04 },
393
+ p: { avg: 2, sd: 1.86 },
394
+ },
395
+ },
396
+ {
397
+ age: 11,
398
+ factors: {
399
+ l: { avg: 14.82, sd: 3.7 },
400
+ n: { avg: 8.05, sd: 4 },
401
+ e: { avg: 17.39, sd: 3 },
402
+ p: { avg: 2.38, sd: 1.9 },
403
+ },
404
+ },
405
+ {
406
+ age: 12,
407
+ factors: {
408
+ l: { avg: 14.8, sd: 3.7 },
409
+ n: { avg: 9.6, sd: 4.5 },
410
+ e: { avg: 16.66, sd: 3 },
411
+ p: { avg: 2.7, sd: 1.9 },
412
+ },
413
+ },
414
+ {
415
+ age: 13,
416
+ factors: { l: { avg: 14, sd: 4 }, n: { avg: 10, sd: 4 }, e: { avg: 17.5, sd: 3 }, p: { avg: 3, sd: 2 } },
417
+ },
418
+ {
419
+ age: 14,
420
+ factors: {
421
+ l: { avg: 12.45, sd: 4 },
422
+ n: { avg: 11.21, sd: 4 },
423
+ e: { avg: 17.7, sd: 3 },
424
+ p: { avg: 3.7, sd: 2.2 },
425
+ },
426
+ },
427
+ {
428
+ age: 15,
429
+ factors: {
430
+ l: { avg: 13.27, sd: 4 },
431
+ n: { avg: 12, sd: 3.9 },
432
+ e: { avg: 15.18, sd: 3.5 },
433
+ p: { avg: 3.6, sd: 2.3 },
434
+ },
435
+ },
436
+ ],
437
+ },
438
+ };
439
+ const gender = this.dataset.info.fields.filter((p) => p.eng == "gender")[0]?.user_answered;
440
+ const age = parseInt(this.dataset.info.fields.filter((p) => p.eng == "age")[0]?.user_answered);
441
+ let selecedTable = null;
442
+ if (gender == 1) {
443
+ selecedTable = this.constructor.name == "EPQ93" ? table.adult.female : table.children.female;
444
+ } else {
445
+ selecedTable = this.constructor.name == "EPQ93" ? table.adult.male : table.children.male;
446
+ }
447
+ let selecedTableRow = null;
448
+ for (let i = 0; i < selecedTable.length; i++) {
449
+ const ageID = selecedTable[i].age;
450
+ const range = ageID.toString().match(/(\d+)-(\d+)/);
451
+ if (range) {
452
+ range[2] = range[2].replace(59, 1000000000);
453
+ }
454
+ if (age == ageID || (range && age >= range[1] && age <= range[2])) {
455
+ selecedTableRow = ageID;
456
+ break;
457
+ }
458
+ }
459
+ const score = {
460
+ p: this.dataset.score[3],
461
+ e: this.dataset.score[2],
462
+ n: this.dataset.score[1],
463
+ l: this.dataset.score[0],
464
+ };
465
+ const col9 = this.col9;
466
+ return [{ items, selecedTable, selecedTableRow, score, col9 }];
467
+ }
468
+ }
469
+
470
+ module.exports = EPQ93;
@@ -0,0 +1,4 @@
1
+ const EPQ93 = require("./EPQ93");
2
+ class EPQ9A extends EPQ93 {}
3
+
4
+ module.exports = EPQ9A;
@@ -0,0 +1,72 @@
1
+ {{#> layout}}
2
+ <defs>
3
+ {{#with spec.item.circle}}
4
+ <clipPath id="raw-circle-roll">
5
+ {{gauge R r brs (object start=angles.start end=angles.end) false}}
6
+ </clipPath>
7
+ {{/with}}
8
+ </defs>
9
+ <g transform="translate({{spec.profile.padding.x}}, {{spec.profile.padding.y}})">
10
+ {{#each items as | item index |}}
11
+ <g transform="translate({{math index '*' 180}}, 0)">
12
+ <g transform="translate({{@root.spec.item.circle.R}}, {{@root.spec.item.circle.R}})">
13
+ {{#with @root.spec.item.circle}}
14
+ {{gauge R r (object tl=0 tr=0 bl=0 br=0) (object start=angles.start end=angles.end) direction clip-path="url(#raw-circle-roll)" fill="#F4F4F5" stroke="#E4E4E7"}}
15
+ {{gauge R r (object tl=0 tr=0 bl=0 br=0) (object start=angles.start end=../zeta) direction clip-path="url(#raw-circle-roll)" fill=../label.fill}}
16
+ {{/with}}
17
+ <text x="0" y="0" text-anchor="middle" font-size="28" font-weight="500" fill="{{item.label.fill}}" dy="8">{{item.mark}}</text>
18
+ {{#each item.ticks as | tick |}}
19
+ {{setVar "rm" (math (math @root.spec.item.circle.R '+' @root.spec.item.circle.r) '/' 2)}}
20
+ {{setVar "p" (polarToCartesian rm tick.angle)}}
21
+ <text x="{{p.x}}" y="{{p.y}}" font-size="14" font-weight="500" fill="#6B7280" text-anchor="middle" dy="2.8" transform="translate(-{{ternary @first @root.spec.item.ticks.number.offset 0}}, -{{ternary @last @root.spec.item.ticks.number.offset 0}})">{{tick.number}}</text>
22
+ {{/each}}
23
+ </g>
24
+ <text x="70" y="156" text-anchor="middle" font-size="18" font-weight="500" fill="{{item.label.fill}}" dy="18">
25
+ {{item.label.fr}}
26
+ </text>
27
+ <text x="70" y="184" text-anchor="middle" font-size="18" font-weight="500" fill="{{item.label.fill}}" dy="18">
28
+ ({{item.label.code}})
29
+ </text>
30
+ </g>
31
+ {{/each}}
32
+ <g transform="translate(0, 249)">
33
+ {{#each selecedTable as | row rid |}}
34
+ <g transform="translate(0, {{math @index '*' 40}})">
35
+ {{setVar 'mark' (ternary (boolean @root.selecedTableRow '==' row.age) '#6B7280' '#F3F4F6')}}
36
+ {{setVar 'markFont' (ternary (boolean @root.selecedTableRow '==' row.age) '#FFFFFF' '#6B7280')}}
37
+ {{#each row.factors as | factor f |}}
38
+ {{setVar 'stroke' (ternary (boolean @root.selecedTableRow '==' row.age) '#E5E7EB' '#F9FAFB')}}
39
+ {{setVar 'fontColor' (ternary (boolean @root.selecedTableRow '==' row.age) '#FFFFFF' '#64748B')}}
40
+ {{setVar 'label' (lookup @root.score f)}}
41
+ {{setVar 'border' (ternary (boolean @root.selecedTableRow '==' row.age) label.label.fill '#E2E8F0')}}
42
+ {{setVar 'avgColor' (ternary (boolean @root.selecedTableRow '==' row.age) label.label.fill '#64748B')}}
43
+ {{setVar 'rect' (ternary (boolean @root.selecedTableRow '==' row.age) label.label.fill '#F1F5F9')}}
44
+ <g transform="translate({{math (math 128 '+' 53) '*' @index}}, 0)">
45
+ <path d="M 64 0 l -60 0 a 4 4 90 0 0 -4 4 l 0 24 a 4 4 90 0 0 4 4 l 60 0 l 0 -1 l -60 0 a 3 3 90 0 1 -3 -3 l 0 -24 a 3 3 0 0 1 3 -3 l 60 0 Z" fill="{{border}}"/>
46
+ {{bar 64 32 (object tl=0 tr=4 bl=0 br=4) (toRad 0) fill=rect transform="translate(64, 0)"}}
47
+ <text font-size="14" weight="500" fill="{{avgColor}}" x="32" y="16" dy="3.5" text-anchor="middle">{{factor.sd}}</text>
48
+ <text font-size="14" weight="500" fill="{{fontColor}}" x="98" y="16" dy="3.5" text-anchor="middle">{{factor.avg}}</text>
49
+ <line y1="16" y2="16" x1="128" x2="181" stroke="{{stroke}}" stroke-width="2"/>
50
+ </g>
51
+ {{/each}}
52
+ <g transform="translate(709, 0)">
53
+ <path d="M 11 0 l 56 0 a 4 4 90 0 1 4 4 l 0 24 a 4 4 90 0 1 -4 4 l -56 0 a 4 4 90 0 1 -4 -4 l 0 -4 l -7 -7 c 0 0 -1 -1 0 -2 l 7 -7 l 0 -4 a 4 4 90 0 1 4 -4 Z" fill="{{mark}}"/>
54
+ <text font-size="15" weight="500" fill="{{markFont}}" x="39" y="16" dy="3.75" text-anchor="middle" direction="ltr">{{replace row.age '-' ' - '}}</text>
55
+ </g>
56
+ </g>
57
+ {{/each}}
58
+ <g transform="translate(0, {{ternary (boolean col9 '==' true) '400' '360'}})">
59
+ <g transform="translate(244.5, 0)">
60
+ <path d="M 96 0 l -92 0 a 4 4 90 0 0 -4 4 l 0 24 a 4 4 90 0 0 4 4 l 92 0 l 0 -1 l -92 0 a 3 3 90 0 1 -3 -3 l 0 -24 a 3 3 0 0 1 3 -3 l 92 0 Z" fill="#E2E8F0" />
61
+ {{bar 96 32 (object tl=0 tr=4 bl=0 br=4) (toRad 0) fill="#F1F5F9" transform="translate(96, 0)"}}
62
+ <text font-size="14" weight="500" fill="#64748B" x="48" y="16" dy="3.5" text-anchor="middle">انحراف معیار</text>
63
+ <text font-size="14" weight="500" fill="#64748B" x="144" y="16" dy="3.5" text-anchor="middle">میانگین</text>
64
+ </g>
65
+ <g transform="translate(709, 0)">
66
+ <path d="M 11 0 l 56 0 a 4 4 90 0 1 4 4 l 0 24 a 4 4 90 0 1 -4 4 l -56 0 a 4 4 90 0 1 -4 -4 l 0 -4 l -7 -7 c 0 0 -1 -1 0 -2 l 7 -7 l 0 -4 a 4 4 90 0 1 4 -4 Z" fill="#F3F4F6"/>
67
+ <text font-size="15" weight="500" fill="#6B7280" x="39" y="16" dy="3.75" text-anchor="middle">سن</text>
68
+ </g>
69
+ </g>
70
+ </g>
71
+ </g>
72
+ {{/layout}}
@@ -0,0 +1 @@
1
+ {{> EPQ93}}
@@ -28,14 +28,14 @@
28
28
  {{/each}}
29
29
  <rect x="138" y="0" width="1" height="310" rx="1" fill="#FFFFFF" style="filter: drop-shadow(1px 0 2px rgba(0,0,0, .5));"/>
30
30
  <g transform="translate(679, 0)">
31
- <text x="82" y="24" fill="#A1A1AA" font-size="14px" font-weight="400" text-anchor="start">145</text>
32
- <line x1="43" x2="59" y1="20" y2="20" stroke="#E4E4E7" stroke-dasharray="4 4" />
31
+ <text x="82" y="24" fill="#71717A" font-size="14px" font-weight="400" text-anchor="start">145</text>
32
+ <line x1="43" x2="59" y1="20" y2="20" stroke="#A1A1AA" stroke-dasharray="4 4" />
33
33
  {{bar 40 290 (object tr=20 tl=20 br=0 bl=0) (toRad 0) transform="translate(0, 20)" fill="#F4F4F5"}}
34
34
  {{bar 40 (math 2 '*' raw.mark) (object tr=20 tl=20 br=0 bl=0) (toRad 0) transform=(concat "translate(0," (concat (math 20 '+' (math 290 '-' (math 2 '*' raw.mark))) ")")) fill="#52525B"}}
35
35
  <text x="20" y="{{math 50 '+' (math 290 '-' (math 2 '*' raw.mark))}}" fill="#FFFFFF" font-size="20px" font-weight="500" text-anchor="middle">{{raw.mark}}</text>
36
36
 
37
- <text x="60" y="261" fill="#A1A1AA" font-size="14px" font-weight="400" text-anchor="end">29</text>
38
- <line x1="43" x2="59" y1="257" y2="257" stroke="#E4E4E7" stroke-dasharray="4 4" />
37
+ <text x="60" y="261" fill="#71717A" font-size="14px" font-weight="400" text-anchor="end">29</text>
38
+ <line x1="43" x2="59" y1="257" y2="257" stroke="#A1A1AA" stroke-dasharray="4 4" />
39
39
 
40
40
  <rect x="-2" y="310" width="44" height="1" rx="1" fill="#FFFFFF" style="filter: drop-shadow(1px 0 2px rgba(0,0,0, .5));"/>
41
41
  <text transform="translate(-14, 247) rotate(270, 8, 8)" fill="#71717A" font-size="16px" font-weight="500" text-anchor="start">نمره کل</text>
@@ -49,9 +49,9 @@
49
49
  {{gauge R r (object tl=0 tr=0 bl=0 br=0) (object start=angles.start end=item.zeta) direction clip-path="url(#items-circle-roll)" fill=item.fill fill-opacity=item.opacity}}
50
50
  {{/with}}
51
51
  <text x="0" y="0" text-anchor="middle" font-size="28" font-weight="600" fill="{{item.fill}}" dy="5">{{item.mark}}</text>
52
- <text x="-8" y="-40" font-size="14" font-weight="500" fill="#71717A">0</text>
53
- <text x="-42" y="-8" font-size="14" font-weight="500" fill="#71717A" text-anchor="middle">{{lookup @root.spec.gaugeItems.maxValues item.label.eng}}</text>
54
- <g transform="translate(0, 80)">
52
+ <text x="-8" y="-42.5" font-size="14" font-weight="500" fill="#71717A">0</text>
53
+ <text x="-48" y="-8" font-size="14" font-weight="500" fill="#71717A" text-anchor="middle">{{lookup @root.spec.gaugeItems.maxValues item.label.eng}}</text>
54
+ <g transform="translate(0, 84)">
55
55
  <text x="0" y="0" font-size="14" font-weight="500" fill="{{item.fill}}" text-anchor="middle">{{item.label.fr}}</text>
56
56
  {{#each (wrapOnNewline item.label.desc) as | line index |}}
57
57
  <text x="0" y="{{math 15 '+' (math index '*' 15)}}" font-size="12" font-weight="400" fill="#A1A1AA" text-anchor="middle" dy="5">{{line}}</text>