hayun-vite 0.0.0 → 0.0.2
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/assets/Daco_1154502.png +0 -0
- package/assets/ear-logo-1.png +0 -0
- package/assets/fonts/Vazirmatn-Regular.woff2 +0 -0
- package/assets/hearing-aid-computer-icons-sound-ears-.png +0 -0
- package/assets/logo.svg +1 -0
- package/assets/logo192.png +0 -0
- package/assets/rasa.png +0 -0
- package/assets/styles-test.css +90 -0
- package/assets/styles.css +90 -0
- package/data/formData1.js +42 -0
- package/data/officesObjStore.js +57 -0
- package/data/patientsObjStore.js +74 -0
- package/data/sampleData.js +95 -0
- package/index.js +9 -3
- package/package.json +1 -1
- package/src/{Audiogram.js → Audiogram/Audiogram.js} +6 -4
- package/src/Form/Form.js +277 -0
- package/src/Form/Form_N.js +159 -0
- package/src/Form/Forms-Test.html +125 -0
- package/src/Form/Forms.js +135 -0
- package/src/Form/Header.js +92 -0
- package/src/Form/Reflex.js +142 -0
- package/src/Form/Sections.js +72 -0
- package/src/Form/Speech.js +133 -0
- package/src/Form/TextBox.js +81 -0
- package/src/Form/Tympanogram.js +356 -0
- package/src/Form/formStyles.css +122 -0
- package/src/Form/globalinfo.js +68 -0
- package/src/Form/grid/drawGrid.js +84 -0
- package/src/Form/grid/hideGrid.js +9 -0
- package/src/Form/printForm.js +76 -0
- package/src/Form/rasa-audio-208-293.png +0 -0
- package/src/Form/templates/combo.js +248 -0
- package/src/Form/templates/dims.js +204 -0
- package/src/Form/templates/rasaAud.js +287 -0
- package/src/Form/templates/rasaAud.png +0 -0
- package/src/Form/templates/rasaTymp.jpg +0 -0
- package/src/fonts/Vazirmatn-Regular.woff2 +0 -0
- package/src/main.js +87 -74
- package/src/note.html +1 -0
- package/src/style.css +157 -96
- package/src/AudiogramChart-Test.html +0 -56
- /package/src/{dims.js → Audiogram/dims.js} +0 -0
@@ -0,0 +1,135 @@
|
|
1
|
+
const svgNS = "http://www.w3.org/2000/svg";
|
2
|
+
|
3
|
+
import printForm from "./printForm.js";
|
4
|
+
import Form from "./Form.js";
|
5
|
+
import combo from "./templates/combo.js"; // این در حقیقیت یک تمپلت هست
|
6
|
+
import rasaAud from "./templates/rasaAud.js";
|
7
|
+
import rasaAudImage from './templates/rasaAud.png'
|
8
|
+
import '../fonts/Vazirmatn-Regular.woff2'
|
9
|
+
import '../style.css'
|
10
|
+
|
11
|
+
// کلاس جدید که فرمهای مختلف را نمایش میدهد
|
12
|
+
export default class Forms {
|
13
|
+
constructor({ assets, container } = {}) {
|
14
|
+
// ایجاد یک دیو برای قرار دادن دکمه ها و لینک های فرم
|
15
|
+
const div = document.createElement('div');
|
16
|
+
div.style = 'border: 1px solid brown; margin: 0; padding: 0;'
|
17
|
+
container.appendChild(div);
|
18
|
+
// اضافه کردن دکمه به دیو فرم
|
19
|
+
const btn1 = this.putButton({ container: div, text: 'پرنده پرپر' });
|
20
|
+
const btn2 = this.putButton({ container: div, text: combo.label });
|
21
|
+
const printBtn = this.putButton({ container: div, text: 'Print', id: 'print' });
|
22
|
+
|
23
|
+
// یک دیو تعریف میکنیم که سمت ادیولاگ برای تعریف لیستنر استفاده میشود
|
24
|
+
this.div = document.createElement('div'); // این بخش فقط شامل بخش اسویجی هست
|
25
|
+
container.appendChild(this.div)
|
26
|
+
|
27
|
+
this.forms = []; // آرایه آبجکت های فرم های مختلف
|
28
|
+
this.forms.push(new Form({ container: this.div, template: rasaAud, image: rasaAudImage }));
|
29
|
+
this.forms.push(new Form({ container: this.div, template: combo }));
|
30
|
+
|
31
|
+
// انتخاب فرم پیشفرض
|
32
|
+
this.forms[0].form.style.display = 'block';
|
33
|
+
this.selectedForm = this.forms[0]
|
34
|
+
|
35
|
+
// تعریف رویداد دکمه چاپ فرم نمایشی
|
36
|
+
printBtn.addEventListener('click', () => { printForm({ container: this.selectedForm.form }) })
|
37
|
+
|
38
|
+
btn1.addEventListener('click', () => {
|
39
|
+
this.forms[1].form.style.display = 'none'
|
40
|
+
// this.forms[2].form.style.display = 'none'
|
41
|
+
this.forms[0].form.style.display = 'block';
|
42
|
+
this.selectedForm = this.forms[0];
|
43
|
+
this.update(this.allData);
|
44
|
+
|
45
|
+
});
|
46
|
+
|
47
|
+
btn2.addEventListener('click', () => {
|
48
|
+
this.forms[0].form.style.display = 'none'
|
49
|
+
// this.forms[2].form.style.display = 'none'
|
50
|
+
this.forms[1].form.style.display = 'block';
|
51
|
+
this.selectedForm = this.forms[1];
|
52
|
+
// آپدیت فرم انتخاب شده
|
53
|
+
this.update(this.allData);
|
54
|
+
});
|
55
|
+
|
56
|
+
// btn3.addEventListener('click', () => {
|
57
|
+
// this.forms[0].form.style.display = 'none'
|
58
|
+
// this.forms[1].form.style.display = 'none'
|
59
|
+
// this.forms[2].form.style.display = 'block';
|
60
|
+
// this.selectedForm = this.forms[2]
|
61
|
+
// // آپدیت فرم انتخاب شده
|
62
|
+
// this.update(this.allData);
|
63
|
+
|
64
|
+
// });
|
65
|
+
// for Develop
|
66
|
+
this.event();
|
67
|
+
}
|
68
|
+
|
69
|
+
event() {
|
70
|
+
this.div.addEventListener('click', (e) => {
|
71
|
+
console.log(e.target);
|
72
|
+
})
|
73
|
+
}
|
74
|
+
// این تابع یک بار از بیرون کلاس فراخوانی میشه و یک بار وقتی از داخل تمپلت فرم را عوض میکنیم
|
75
|
+
update({ data, officeData, patientData, sessionIndex = 0 }) {
|
76
|
+
// ذخیره کل دیتا برای استفاده داخلی آپدیت فرم انتخاب شده
|
77
|
+
this.allData = { data, officeData, patientData, sessionIndex }
|
78
|
+
this.selectedForm.update({ data, officeData, patientData, sessionIndex })
|
79
|
+
}
|
80
|
+
// ایجاد دکمه تاگل خطوط مرزی فرم و سکشن و المان
|
81
|
+
toggleBorders({ activeForm, container = 'form' }) {
|
82
|
+
const borders = activeForm.querySelectorAll(`[data-name="${container}-border"]`);
|
83
|
+
// آبجکت نگهداری رنگ بوردرها
|
84
|
+
const color = { form: 'black', section: 'blue', element: 'green' }
|
85
|
+
borders.forEach(border => {
|
86
|
+
// console.log(border.style.stroke);
|
87
|
+
border.style.stroke = (border.style.stroke === 'transparent') ? color[container] : 'transparent';
|
88
|
+
})
|
89
|
+
}
|
90
|
+
// توابع داخلی ایجاد دکمه و لینک های بالای فرم
|
91
|
+
putButton({ container, id, text, }) {
|
92
|
+
let style
|
93
|
+
// style = `
|
94
|
+
// background-color:rgb(0, 149, 149);
|
95
|
+
// /* Green background */
|
96
|
+
// border: none;
|
97
|
+
// /* Remove borders */
|
98
|
+
// color: white;
|
99
|
+
// /* White text */
|
100
|
+
// padding: 15px 32px;
|
101
|
+
// /* Some padding */
|
102
|
+
// text-align: center;
|
103
|
+
// /* Centered text */
|
104
|
+
// text-decoration: none;
|
105
|
+
// /* Remove underline */
|
106
|
+
// display: inline-block;
|
107
|
+
// /* Make the button inline */
|
108
|
+
// font-size: 16px;
|
109
|
+
// /* Increase font size */
|
110
|
+
// margin: 4px 2px;
|
111
|
+
// /* Add some margin */
|
112
|
+
// cursor: pointer;
|
113
|
+
// /* Pointer cursor on hover */
|
114
|
+
// border-radius: 8px;
|
115
|
+
// /* Rounded corners */
|
116
|
+
// transition: background-color 0.3s;
|
117
|
+
// /* Smooth transition */
|
118
|
+
// `;
|
119
|
+
const button = document.createElement('button');
|
120
|
+
button.setAttribute('id', id);
|
121
|
+
button.setAttribute('style', style);
|
122
|
+
button.innerHTML = text;
|
123
|
+
|
124
|
+
// button.addEventListener('mouseenter', () => {
|
125
|
+
// button.style.backgroundColor = 'rgb(54, 115, 115)'; // Change color on hover
|
126
|
+
// });
|
127
|
+
// button.addEventListener('mouseleave', () => {
|
128
|
+
// button.style.backgroundColor = 'rgb(0, 149, 149)'; // Revert color when not hovering
|
129
|
+
// });
|
130
|
+
|
131
|
+
container.appendChild(button);
|
132
|
+
return button;
|
133
|
+
|
134
|
+
}
|
135
|
+
}
|
@@ -0,0 +1,92 @@
|
|
1
|
+
import putLine from "../common/putLine.js";
|
2
|
+
import putRect from "../common/putRect.js";
|
3
|
+
import putText from "../common/putText.js";
|
4
|
+
const svgNS = "http://www.w3.org/2000/svg";
|
5
|
+
|
6
|
+
export default class Header {
|
7
|
+
constructor({ container }) {
|
8
|
+
this.container = container;
|
9
|
+
}
|
10
|
+
|
11
|
+
draw({ dims, stroke = true }) {
|
12
|
+
|
13
|
+
this.inputs = dims.inputs
|
14
|
+
let value;
|
15
|
+
let width = dims.width;
|
16
|
+
let height = dims.height;
|
17
|
+
let x = dims.margin.left;
|
18
|
+
let y = dims.margin.top;
|
19
|
+
|
20
|
+
const svg = document.createElementNS(svgNS, "svg");
|
21
|
+
svg.setAttribute("x", x);
|
22
|
+
svg.setAttribute("y", y);
|
23
|
+
svg.setAttribute("width", width);
|
24
|
+
svg.setAttribute("height", height);
|
25
|
+
svg.setAttribute('style', 'direction: rtl !important; user-select: none;')
|
26
|
+
|
27
|
+
// Logo
|
28
|
+
let image = document.createElementNS(svgNS, "image");
|
29
|
+
image.setAttribute("data-name", "officeLogo")
|
30
|
+
image.setAttribute("width", "17");
|
31
|
+
image.setAttribute("height", "17");
|
32
|
+
image.setAttribute("x", width - 16);
|
33
|
+
image.setAttribute("y", 0.5);
|
34
|
+
svg.appendChild(image);
|
35
|
+
|
36
|
+
let style = `
|
37
|
+
user-select: none;
|
38
|
+
direction: rtl;
|
39
|
+
/* text-align: center; */
|
40
|
+
font-family: vazirmatn;
|
41
|
+
font-size: 0.8mm;
|
42
|
+
font-weight: bolder;
|
43
|
+
text-anchor: start; /*تراز افقی*/
|
44
|
+
dominant-baseline: auto; /* تراز عمودی*/
|
45
|
+
`;
|
46
|
+
|
47
|
+
// اگر مقدار استروک درست بود لیبل ها را چاپ کن
|
48
|
+
if (!dims.hideContext) {
|
49
|
+
dims.elements.forEach(element => {
|
50
|
+
switch (element.type) {
|
51
|
+
case 'text':
|
52
|
+
({ x, y, value } = element);
|
53
|
+
|
54
|
+
putText({ container: svg, value, x, y, style: style });
|
55
|
+
break;
|
56
|
+
case 'line':
|
57
|
+
let { x1, y1, x2, y2 } = element;
|
58
|
+
putLine({ container: svg, x1, y1, x2, y2 });
|
59
|
+
break;
|
60
|
+
}
|
61
|
+
});
|
62
|
+
}
|
63
|
+
|
64
|
+
style = `
|
65
|
+
font-family: Arial, Helvetica, sans-serif !important;
|
66
|
+
font-size: 0.8mm;
|
67
|
+
font-weight: bold;
|
68
|
+
text-anchor: start; /*تراز افقی*/
|
69
|
+
/* dominant-baseline: middle; /* تراز عمودی*/
|
70
|
+
`;
|
71
|
+
// محل اینپوتهای دیتا
|
72
|
+
let name;
|
73
|
+
dims.inputs.forEach(input => {
|
74
|
+
({ name, x, y } = input);
|
75
|
+
putText({ container: svg, x, y, style: style, name });
|
76
|
+
});
|
77
|
+
|
78
|
+
// مربع احاطهکننده کل جدول برای راهنمای توسعه
|
79
|
+
const borderRect = putRect({ container: svg, x: 0, y: 0, width, height, name: "header" });;
|
80
|
+
this.borderRect = borderRect;
|
81
|
+
this.container.appendChild(svg);
|
82
|
+
// this.header = svg;
|
83
|
+
}
|
84
|
+
|
85
|
+
update(data) {
|
86
|
+
this.container.querySelector("[data-name=officeName]").innerHTML = data?.officeName || "";
|
87
|
+
this.container.querySelector("[data-name=date]").innerHTML = data?.createDate || "";
|
88
|
+
this.container.querySelector("[data-name=officeLogo]").setAttribute("href", data?.officeLogo || "");
|
89
|
+
|
90
|
+
}
|
91
|
+
|
92
|
+
}
|
@@ -0,0 +1,142 @@
|
|
1
|
+
import putRect from "../common/putRect.js";
|
2
|
+
import putText from "../common/putText.js";
|
3
|
+
|
4
|
+
const svgNS = "http://www.w3.org/2000/svg";
|
5
|
+
|
6
|
+
export default class Reflex {
|
7
|
+
constructor({ container }) {
|
8
|
+
this.container = container;
|
9
|
+
// this.left = dims.pad.left;
|
10
|
+
// this.top = dims.pad.top;
|
11
|
+
}
|
12
|
+
|
13
|
+
draw({ dims }) {
|
14
|
+
let width = dims.width;
|
15
|
+
let height = dims.height;
|
16
|
+
let x = dims.margin.left;
|
17
|
+
let y = dims.margin.top;
|
18
|
+
let style;
|
19
|
+
// جدولی با ۳ سطر و ۵ ستون
|
20
|
+
|
21
|
+
// تقسیم بر ۶ کردم تا با عرض باکسهای گفتار یکی باشه. وگرنه اینجا ۵ تا ستون داریم. یک ستون میدیم کپشن عمودی ستون اول
|
22
|
+
const cw = width / 6; // پهنای هر خانه
|
23
|
+
const ch = height / 3; // ارتفاع هر خانه
|
24
|
+
|
25
|
+
const svg = document.createElementNS(svgNS, "svg");
|
26
|
+
// svg.setAttribute("id", id);
|
27
|
+
svg.setAttribute("x", x);
|
28
|
+
svg.setAttribute("y", y);
|
29
|
+
svg.setAttribute("width", width);
|
30
|
+
svg.setAttribute("height", height);
|
31
|
+
svg.setAttribute("class", "reflex");
|
32
|
+
|
33
|
+
let lable = ["", "500", "1000", "2000", "4000"]; // مقادیر برچسبهای سطر اول
|
34
|
+
let cw1 = width / 6; // پهنای خانههای سطر اول
|
35
|
+
let ch1 = height / 3; // ارتفاع خانههای سطر اول
|
36
|
+
let ch2 = height / 3; // ارتفاع خانههای سطر دوم
|
37
|
+
|
38
|
+
// چاپ برچسبهای سطر اول
|
39
|
+
style = `
|
40
|
+
user-select: none;
|
41
|
+
direction: ltr !important;
|
42
|
+
/* text-align: center; */
|
43
|
+
font-family: Arial, Helvetica, sans-serif !important;
|
44
|
+
font-size: 0.8mm;
|
45
|
+
font-weight: bold;
|
46
|
+
text-anchor: middle; /*تراز افقی*/
|
47
|
+
dominant-baseline: middle; /* تراز عمودی*/
|
48
|
+
`;
|
49
|
+
lable.forEach((value, i) => {
|
50
|
+
if (value != "") {
|
51
|
+
let x = cw1 / 2 + cw1 * (i + 1);
|
52
|
+
let y = ch1 / 2;
|
53
|
+
// putText(value, x, y, "", "middle", "middle"); // با استایل تراز عمودی پایین نسبت به خط پایه
|
54
|
+
putText({ container: svg, value, x, y, style })
|
55
|
+
}
|
56
|
+
});
|
57
|
+
|
58
|
+
// مقادیر برچسبهای ستون اول
|
59
|
+
style = `
|
60
|
+
user-select: none;
|
61
|
+
direction: ltr !important;
|
62
|
+
/* text-align: center; */
|
63
|
+
font-family: Arial, Helvetica, sans-serif !important;
|
64
|
+
font-size: 0.8mm;
|
65
|
+
font-weight: bold;
|
66
|
+
text-anchor: end; /*تراز افقی*/
|
67
|
+
dominant-baseline: middle; /* تراز عمودی*/
|
68
|
+
`;
|
69
|
+
lable = ["Freq", "IPSI", "CONTRA"];
|
70
|
+
// چاپ برچسبهای ستون اول
|
71
|
+
putText({ container: svg, value: "Freq", x: cw1 * 2, y: ch1 / 2, style: style })
|
72
|
+
putText({ container: svg, value: "IPSI", x: cw1 * 2, y: ch1 * 3 / 2, style: style })
|
73
|
+
putText({ container: svg, value: "CONTRA", x: cw1 * 2, y: ch1 * 5 / 2, style: style })
|
74
|
+
|
75
|
+
//چاپ ده باکس سطر دوم و سوم
|
76
|
+
for (let j = 1; j <= 2; j++) {
|
77
|
+
for (let i = 2; i <= 5; i++) {
|
78
|
+
let x = cw1 / 2 + cw1 * i;
|
79
|
+
let y = ch1 * j + ch2 / 2;
|
80
|
+
let bw = cw1 * 0.80; // پهنای هر باکس
|
81
|
+
let bh = ch2 * 0.80; // ارتفاع هر باکس
|
82
|
+
//رسم باکس با مختصات مرکز باکس
|
83
|
+
putBox(x, y, bw, bh);
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
style = `
|
88
|
+
user-select: none;
|
89
|
+
direction: ltr !important;
|
90
|
+
/* text-align: center; */
|
91
|
+
font-family: Arial, Helvetica, sans-serif !important;
|
92
|
+
font-size: 0.8mm;
|
93
|
+
text-anchor: middle; /*تراز افقی*/
|
94
|
+
dominant-baseline: middle; /* تراز عمودی*/
|
95
|
+
`;
|
96
|
+
let names = ["IPSI_500", "IPSI_1000", "IPSI_2000", "IPSI_4000"];
|
97
|
+
for (let index = 0; index < 4; index++) {
|
98
|
+
x = cw1 / 2 + cw1 * (index + 2);
|
99
|
+
y = ch1 + ch2 / 2;
|
100
|
+
putText({ container: svg, value: "", x: x, y: y, style: style, name: names[index] })
|
101
|
+
}
|
102
|
+
|
103
|
+
// المنتهای تکست خالی با آیدی یکتا در سطر سوم
|
104
|
+
// آرایه نام آیدی یکتا برای المنت تکست مقادیر برای استفاده تابع آپدیت
|
105
|
+
names = ["CONTRA_500", "CONTRA_1000", "CONTRA_2000", "CONTRA_4000"];
|
106
|
+
|
107
|
+
for (let index = 0; index < 4; index++) {
|
108
|
+
// const idValue = idValues[index];
|
109
|
+
x = cw1 / 2 + cw1 * (index + 2);
|
110
|
+
y = ch1 * 2 + ch2 / 2;
|
111
|
+
putText({ container: svg, value: "", x: x, y: y, style: style, name: names[index] })
|
112
|
+
}
|
113
|
+
// مربع احاطهکننده کل جدول برای راهنمای توسعه
|
114
|
+
style = 'fill: transparent; stroke: green; stroke-width: 0.5;';
|
115
|
+
putRect({ container: svg, x: 0, y: 0, width, height, style, name: dims.name })
|
116
|
+
this.container.appendChild(svg);
|
117
|
+
this.chart = svg;
|
118
|
+
// return svg;
|
119
|
+
|
120
|
+
// توابع داخلی مورد نیاز
|
121
|
+
function putBox(x, y, w, h) {
|
122
|
+
let rect = document.createElementNS(svgNS, "rect");
|
123
|
+
rect.setAttribute("x", x - w / 2);
|
124
|
+
rect.setAttribute("y", y - h / 2);
|
125
|
+
rect.setAttribute("width", w);
|
126
|
+
rect.setAttribute("height", h);
|
127
|
+
rect.setAttribute("style", "fill: transparent; stroke: black; stroke-width: 0.2;");
|
128
|
+
svg.appendChild(rect);
|
129
|
+
}
|
130
|
+
}
|
131
|
+
|
132
|
+
update(data) {
|
133
|
+
this.chart.querySelector(`text[data-name="IPSI_500"]`).innerHTML = data?.IPSI?.["500"] || "";
|
134
|
+
this.chart.querySelector(`text[data-name="IPSI_1000"]`).innerHTML = data?.IPSI?.["1000"] || "";
|
135
|
+
this.chart.querySelector(`text[data-name="IPSI_2000"]`).innerHTML = data?.IPSI?.["2000"] || "";
|
136
|
+
this.chart.querySelector(`text[data-name="IPSI_4000"]`).innerHTML = data?.IPSI?.["4000"] || "";
|
137
|
+
this.chart.querySelector(`text[data-name="CONTRA_500"]`).innerHTML = data?.CONTRA?.["500"] || "";
|
138
|
+
this.chart.querySelector(`text[data-name="CONTRA_1000"]`).innerHTML = data?.CONTRA?.["1000"] || "";
|
139
|
+
this.chart.querySelector(`text[data-name="CONTRA_2000"]`).innerHTML = data?.CONTRA?.["2000"] || "";
|
140
|
+
this.chart.querySelector(`text[data-name="CONTRA_4000"]`).innerHTML = data?.CONTRA?.["4000"] || "";
|
141
|
+
}
|
142
|
+
}
|
@@ -0,0 +1,72 @@
|
|
1
|
+
export default class Sections {
|
2
|
+
constructor({ container, dims }) {
|
3
|
+
this.dims = dims
|
4
|
+
// console.log(this.dims.sections);
|
5
|
+
this.container = container;
|
6
|
+
this.margins = dims.margin;
|
7
|
+
|
8
|
+
this.width = dims.width;
|
9
|
+
this.height = dims.height;
|
10
|
+
|
11
|
+
this.left = 0; // برای این فعلا برنامه ای ندارم وقتی دو سکشن در یک خط لازم شد میام سراغش
|
12
|
+
this.top = 0;
|
13
|
+
// از پایینی برای رسم تاپ لایر استفاده میکنم
|
14
|
+
this.cords = []; // آرایه نگهداری مختصات و طول و عرض هر سکشن
|
15
|
+
|
16
|
+
// یک حلقه آرایه ایجاد میکنیم همه سکشن ها رسم شود
|
17
|
+
this.create()
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
}
|
22
|
+
// ایجاد سکشنها
|
23
|
+
create() {
|
24
|
+
// console.log(this.dims.sections);
|
25
|
+
const margins = this.margins;
|
26
|
+
|
27
|
+
this.dims.sections.forEach(section => {
|
28
|
+
let name = section.name;
|
29
|
+
let width = section.w;
|
30
|
+
let height = section.h;
|
31
|
+
const display = section.display;
|
32
|
+
// اگر مقدار دیسپلی اینلاین بود به بلوک بعد نمیره
|
33
|
+
|
34
|
+
// یک کادر چهارگوش با نام
|
35
|
+
const svgNS = "http://www.w3.org/2000/svg";
|
36
|
+
// const w = dims.header.width, h = dims.header.height;
|
37
|
+
const svg = document.createElementNS(svgNS, "svg");
|
38
|
+
svg.setAttribute("data-name", name);
|
39
|
+
svg.setAttribute("width", width);
|
40
|
+
svg.setAttribute("height", height);
|
41
|
+
svg.setAttribute("x", this.left);
|
42
|
+
svg.setAttribute("y", this.top);
|
43
|
+
|
44
|
+
// نگهداری مختصات رسم بوردر هر سکشن برای استفاده در متد داخلی رسم بودر تاپ لایر
|
45
|
+
this.cords.push({ name: name, width: width, height: height, x: this.left, y: this.top });
|
46
|
+
|
47
|
+
// بوردر راهنما
|
48
|
+
let rect = document.createElementNS(svgNS, "rect");
|
49
|
+
rect.setAttribute("x", 0);
|
50
|
+
rect.setAttribute("y", 0);
|
51
|
+
rect.setAttribute("width", width);
|
52
|
+
rect.setAttribute("height", height);
|
53
|
+
rect.setAttribute("fill", "transparent");
|
54
|
+
rect.setAttribute("stroke", "blue");
|
55
|
+
rect.setAttribute("stroke-width", "0.1mm");
|
56
|
+
rect.setAttribute("data-name", "section-border");
|
57
|
+
svg.appendChild(rect);
|
58
|
+
this[name] = svg;
|
59
|
+
this.container.appendChild(svg)
|
60
|
+
|
61
|
+
// به روز کردن ارتفاع نقطه خالی برای رسم سکشن بعدی
|
62
|
+
// با توجه بلاک یا اینلاین بودن سکشن بالا و چپ را تغییر بده
|
63
|
+
// else { this.left = margins.left; this.top += height; }
|
64
|
+
if (display === 'block') { this.left = 0; this.top += height; }
|
65
|
+
if (display === 'inline') { this.left += width; }
|
66
|
+
|
67
|
+
|
68
|
+
// if (this.left >= this.width) { this.left = margins.left; this.top += height; }
|
69
|
+
});
|
70
|
+
}
|
71
|
+
|
72
|
+
}
|
@@ -0,0 +1,133 @@
|
|
1
|
+
import putRect from "../common/putRect.js";
|
2
|
+
import putText from "../common/putText.js";
|
3
|
+
|
4
|
+
const svgNS = "http://www.w3.org/2000/svg";
|
5
|
+
|
6
|
+
export default class Speech {
|
7
|
+
constructor({ container, side = 'R' }) {
|
8
|
+
this.container = container;
|
9
|
+
}
|
10
|
+
|
11
|
+
draw({ dims, stroke = true }) {
|
12
|
+
// دریافت اطلاعات مختصات چاپ ورودی ها به جز عادی محاسبه شده
|
13
|
+
this.inputs = (dims.forceInsert) ? dims.forceInputs : dims.inputs
|
14
|
+
|
15
|
+
let style;
|
16
|
+
|
17
|
+
let width = dims.width;
|
18
|
+
let height = dims.height;
|
19
|
+
let x = dims.margin.left;
|
20
|
+
let y = dims.margin.top;
|
21
|
+
|
22
|
+
const labels = dims.labels;
|
23
|
+
// const inputs = dims.inputs;
|
24
|
+
const cn = labels.length;
|
25
|
+
|
26
|
+
this.labels = labels;
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
let sideCaption = this.side === "R" ? "Right" : "Left";
|
31
|
+
// یک جدول 6*2 - ۲ سطر و ۶ ستون
|
32
|
+
// const cw = width / 6; // پهنای هر خانه
|
33
|
+
const cw = width / (cn + 1); // پهنای هر خانه
|
34
|
+
const ch = height / 2; // ارتفاع هر خانه
|
35
|
+
// بوردر کل چارت
|
36
|
+
const svg = document.createElementNS(svgNS, "svg");
|
37
|
+
// svg.setAttribute("id", id);
|
38
|
+
svg.setAttribute("x", x);
|
39
|
+
svg.setAttribute("y", y);
|
40
|
+
svg.setAttribute("width", width);
|
41
|
+
svg.setAttribute("height", height);
|
42
|
+
svg.setAttribute("class", "speach");
|
43
|
+
|
44
|
+
style = `
|
45
|
+
user-select: none;
|
46
|
+
direction: ltr !important;
|
47
|
+
/* text-align: center; */
|
48
|
+
font-family: Arial, Helvetica, sans-serif !important;
|
49
|
+
font-size: 0.8mm;
|
50
|
+
font-weight: bold;
|
51
|
+
text-anchor: middle; /*تراز افقی*/
|
52
|
+
dominant-baseline: hanging; /* تراز عمودی*/
|
53
|
+
`;
|
54
|
+
// const lables = ["SAT", "SRT", "MCL", "UCL", "SDS"]; // مقادیر برچسبهای سطر اول
|
55
|
+
// let cw1 = width / 6; // پهنای خانههای سطر اول
|
56
|
+
let cw1 = width / (cn + 1); // پهنای خانههای سطر اول
|
57
|
+
let ch1 = height / 2; // ارتفاع خانههای سطر اول
|
58
|
+
let ch2 = height / 2; // ارتفاع خانههای سطر دوم
|
59
|
+
|
60
|
+
if (!dims.hideContext) {
|
61
|
+
// چاپ برچسبهای سطر اول
|
62
|
+
labels.forEach((value, i) => {
|
63
|
+
let x = cw1 / 2 + cw1 * (i + 1);
|
64
|
+
let y = ch1 / 2;
|
65
|
+
putText({ container: svg, value, x, y, style });
|
66
|
+
})
|
67
|
+
//چاپ پنج باکس سطر دوم
|
68
|
+
for (let i = 1; i <= 5; i++) {
|
69
|
+
let x = cw1 / 2 + cw1 * i;
|
70
|
+
let y = ch1 + ch2 / 2;
|
71
|
+
let bw = cw1 * 0.80; // پهنای هر باکس
|
72
|
+
let bh = ch2 * 0.80; // ارتفاع هر باکس
|
73
|
+
//رسم باکس با مختصات مرکز باکس
|
74
|
+
putBox({ x, y, w: bw, h: bh });
|
75
|
+
}
|
76
|
+
|
77
|
+
style += 'text-anchor: start; dominant-baseline: middle; /* تراز عمودی*/ ';
|
78
|
+
// برچسب راست و چپ سطر دوم
|
79
|
+
putText({ container: svg, value: sideCaption, x: cw1 / 2, y: ch1 + ch2 / 2, style: style }); //با استایل تراز عمودی وسط نسبت به خط پایه
|
80
|
+
}
|
81
|
+
// در سطر دوم
|
82
|
+
// اینپوتها
|
83
|
+
style += 'text-anchor: middle; dominant-baseline: middle; /* تراز عمودی*/ ';
|
84
|
+
|
85
|
+
|
86
|
+
// New
|
87
|
+
if (!dims.forceInsert) {
|
88
|
+
let index = 0;
|
89
|
+
labels.forEach(label => {
|
90
|
+
index++
|
91
|
+
x = cw1 / 2 + cw1 * index;
|
92
|
+
y = ch1 + ch2 / 2;
|
93
|
+
putText({ container: svg, value: "", x: x, y: y, style: style, name: label })
|
94
|
+
})
|
95
|
+
} else {
|
96
|
+
// برای فرم های مثل رسا استفاده میشود
|
97
|
+
let name;
|
98
|
+
this.inputs.forEach(input => {
|
99
|
+
({ name, x, y } = input);
|
100
|
+
putText({ container: svg, x, y, style: style, name });
|
101
|
+
});
|
102
|
+
}
|
103
|
+
// مربع احاطهکننده کل جدول برای راهنمای توسعه
|
104
|
+
style = 'fill: transparent; stroke: green; stroke-width: 0.5;';
|
105
|
+
putRect({ container: svg, x: 0, y: 0, width, height, style, name: dims.name })
|
106
|
+
this.chart = svg;
|
107
|
+
this.container.appendChild(svg);
|
108
|
+
|
109
|
+
// توابع داخلی مورد نیاز
|
110
|
+
// تابع رسم نقطه برای راهنمای نقاط
|
111
|
+
function putBox({ x, y, w, h, style }) {
|
112
|
+
let rect = document.createElementNS(svgNS, "rect");
|
113
|
+
rect.setAttribute("x", x - w / 2);
|
114
|
+
rect.setAttribute("y", y - h / 2);
|
115
|
+
rect.setAttribute("width", w);
|
116
|
+
rect.setAttribute("height", h);
|
117
|
+
rect.setAttribute("style", "fill: transparent; stroke: black; stroke-width: 0.2;");
|
118
|
+
svg.appendChild(rect);
|
119
|
+
}
|
120
|
+
}
|
121
|
+
|
122
|
+
update(data) {
|
123
|
+
this.labels.forEach((label) => {
|
124
|
+
this.chart.querySelector(`text[data-name=${label}]`).innerHTML = data?.[label] || "";
|
125
|
+
})
|
126
|
+
// this.chart.querySelector(`text[data-name="SAT"]`).innerHTML = data?.SAT || "";
|
127
|
+
// this.chart.querySelector(`text[data-name="SRT"]`).innerHTML = data?.SRT || "";
|
128
|
+
// this.chart.querySelector(`text[data-name="MCL"]`).innerHTML = data?.MCL || "";
|
129
|
+
// this.chart.querySelector(`text[data-name="UCL"]`).innerHTML = data?.UCL || "";
|
130
|
+
// this.chart.querySelector(`text[data-name="SDS"]`).innerHTML = data?.SDS || "";
|
131
|
+
}
|
132
|
+
|
133
|
+
}
|
@@ -0,0 +1,81 @@
|
|
1
|
+
import putLine from "../common/putLine.js";
|
2
|
+
import putRect from "../common/putRect.js";
|
3
|
+
import putText from "../common/putText.js";
|
4
|
+
const svgNS = "http://www.w3.org/2000/svg";
|
5
|
+
|
6
|
+
export default class TextBox {
|
7
|
+
constructor({ container }) {
|
8
|
+
this.container = container;
|
9
|
+
}
|
10
|
+
draw({ dims, stroke = true }) {
|
11
|
+
// دریافت اطلاعات مختصات چاپ ورودی ها به جز عادی محاسبه شده
|
12
|
+
this.inputs = (dims.forceInsert) ? dims.forceInputs : dims.inputs
|
13
|
+
|
14
|
+
let value;
|
15
|
+
let width = dims.width;
|
16
|
+
let height = dims.height;
|
17
|
+
let x = dims.margin.left;
|
18
|
+
let y = dims.margin.top;
|
19
|
+
|
20
|
+
let style;
|
21
|
+
// بوردر کل چارت
|
22
|
+
const svg = document.createElementNS(svgNS, "svg");
|
23
|
+
svg.setAttribute("x", x);
|
24
|
+
svg.setAttribute("y", y);
|
25
|
+
svg.setAttribute("width", width);
|
26
|
+
svg.setAttribute("height", height);
|
27
|
+
svg.setAttribute('style', 'direction: rtl !important; user-select: none;')
|
28
|
+
|
29
|
+
style = `
|
30
|
+
font-family: Arial, Helvetica, sans-serif !important;
|
31
|
+
font-size: 0.8mm;
|
32
|
+
font-weight: bold;
|
33
|
+
text-anchor: start; /*تراز افقی*/
|
34
|
+
/* dominant-baseline: middle; /* تراز عمودی*/
|
35
|
+
`;
|
36
|
+
// اگر مقدار استروک درست بود لیبل ها را چاپ کن
|
37
|
+
if (!dims.hideContext) {
|
38
|
+
dims.elements.forEach(element => {
|
39
|
+
switch (element.type) {
|
40
|
+
case 'text':
|
41
|
+
({ x, y, value } = element);
|
42
|
+
putText({ container: svg, value, x, y, style: style });
|
43
|
+
break;
|
44
|
+
case 'line':
|
45
|
+
let { x1, y1, x2, y2 } = element;
|
46
|
+
putLine({ container: svg, x1, y1, x2, y2 });
|
47
|
+
break;
|
48
|
+
}
|
49
|
+
});
|
50
|
+
}
|
51
|
+
|
52
|
+
style = `
|
53
|
+
font-family: Arial, Helvetica, sans-serif !important;
|
54
|
+
font-size: 0.8mm;
|
55
|
+
text-anchor: start; /*تراز افقی*/
|
56
|
+
/* dominant-baseline: middle; /* تراز عمودی*/
|
57
|
+
`;
|
58
|
+
// محل اینپوتهای دیتا
|
59
|
+
|
60
|
+
let name;
|
61
|
+
this.inputs.forEach(input => {
|
62
|
+
({ name, x, y } = input);
|
63
|
+
putText({ container: svg, x, y, style: style, name });
|
64
|
+
});
|
65
|
+
|
66
|
+
// مربع احاطهکننده کل جدول برای راهنمای توسعه
|
67
|
+
const borderRect = putRect({ container: svg, x: 0, y: 0, width, height, name: dims.name });
|
68
|
+
this.borderRect = borderRect;
|
69
|
+
// console.log(dims);
|
70
|
+
|
71
|
+
this.container.appendChild(svg)
|
72
|
+
// this.patient = svg;
|
73
|
+
|
74
|
+
}
|
75
|
+
|
76
|
+
update(data) {
|
77
|
+
this.inputs.forEach(input => {
|
78
|
+
this.container.querySelector(`text[data-name=${input.name}]`).innerHTML = data?.[input.name] || "";
|
79
|
+
});
|
80
|
+
}
|
81
|
+
}
|