amine_dubs
commited on
Commit
·
7f4d6ac
1
Parent(s):
7db04ce
bb
Browse files- static/script.js +65 -35
static/script.js
CHANGED
@@ -17,7 +17,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
17 |
if (message === undefined || message === null) {
|
18 |
errorText += 'Unknown error occurred';
|
19 |
} else if (typeof message === 'object') {
|
20 |
-
//
|
21 |
if (message.message) {
|
22 |
errorText += message.message;
|
23 |
} else if (message.detail) {
|
@@ -35,6 +35,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
35 |
errorText += message;
|
36 |
}
|
37 |
|
|
|
38 |
errorMessageDiv.textContent = errorText;
|
39 |
errorMessageDiv.style.display = 'block';
|
40 |
// Hide result boxes on error
|
@@ -62,19 +63,29 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
62 |
|
63 |
const formData = new FormData(textForm);
|
64 |
const button = textForm.querySelector('button');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
button.disabled = true;
|
66 |
button.textContent = 'Translating...';
|
67 |
|
68 |
try {
|
69 |
console.log('Sending translation request...');
|
70 |
|
71 |
-
// Create JSON payload from FormData
|
72 |
const payload = {
|
73 |
text: formData.get('text'),
|
74 |
source_lang: formData.get('source_lang'),
|
75 |
target_lang: formData.get('target_lang')
|
76 |
};
|
77 |
|
|
|
|
|
78 |
const response = await fetch('/translate/text', {
|
79 |
method: 'POST',
|
80 |
headers: {
|
@@ -83,40 +94,46 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
83 |
body: JSON.stringify(payload)
|
84 |
});
|
85 |
|
86 |
-
console.log('Response
|
87 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
if (!response.ok) {
|
89 |
-
|
90 |
-
|
91 |
-
const errorData = await response.json();
|
92 |
-
errorMessage = errorData.detail || `HTTP error! status: ${response.status}`;
|
93 |
-
} catch (jsonError) {
|
94 |
-
errorMessage = `HTTP error! status: ${response.status}. Failed to parse error response.`;
|
95 |
-
}
|
96 |
-
throw new Error(errorMessage);
|
97 |
}
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
if (!result.translated_text) {
|
104 |
-
console.error('Missing translated_text in response:', result);
|
105 |
-
throw new Error('Server response missing translated text');
|
106 |
}
|
107 |
-
|
108 |
-
|
|
|
109 |
textResultBox.style.display = 'block';
|
110 |
-
|
111 |
-
textOutput.dir = 'rtl';
|
112 |
-
|
113 |
} catch (error) {
|
114 |
-
console.error('
|
115 |
-
|
116 |
-
displayError(error.message || 'An unexpected error occurred during text translation.');
|
117 |
} finally {
|
118 |
button.disabled = false;
|
119 |
-
button.textContent = 'Translate
|
120 |
}
|
121 |
});
|
122 |
|
@@ -145,13 +162,24 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
145 |
body: formData // FormData handles multipart/form-data automatically
|
146 |
});
|
147 |
|
148 |
-
|
149 |
-
|
150 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
151 |
}
|
152 |
|
153 |
-
|
154 |
-
|
|
|
|
|
|
|
|
|
155 |
|
156 |
// Check if result contains the expected fields
|
157 |
if (!result.translated_text) {
|
@@ -162,10 +190,12 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
162 |
docSourceLang.textContent = result.detected_source_lang || 'N/A';
|
163 |
docOutput.textContent = result.translated_text;
|
164 |
docResultBox.style.display = 'block';
|
|
|
|
|
|
|
165 |
|
166 |
} catch (error) {
|
167 |
console.error('Document translation error:', error);
|
168 |
-
// Always pass error.message instead of the error object
|
169 |
displayError(error.message || 'An unexpected error occurred during document translation.');
|
170 |
} finally {
|
171 |
button.disabled = false;
|
|
|
17 |
if (message === undefined || message === null) {
|
18 |
errorText += 'Unknown error occurred';
|
19 |
} else if (typeof message === 'object') {
|
20 |
+
// Improved error object handling
|
21 |
if (message.message) {
|
22 |
errorText += message.message;
|
23 |
} else if (message.detail) {
|
|
|
35 |
errorText += message;
|
36 |
}
|
37 |
|
38 |
+
console.error("Error details:", message);
|
39 |
errorMessageDiv.textContent = errorText;
|
40 |
errorMessageDiv.style.display = 'block';
|
41 |
// Hide result boxes on error
|
|
|
63 |
|
64 |
const formData = new FormData(textForm);
|
65 |
const button = textForm.querySelector('button');
|
66 |
+
const textInput = document.getElementById('text-input');
|
67 |
+
|
68 |
+
// Validation check
|
69 |
+
if (!textInput.value.trim()) {
|
70 |
+
displayError('Please enter text to translate');
|
71 |
+
return;
|
72 |
+
}
|
73 |
+
|
74 |
button.disabled = true;
|
75 |
button.textContent = 'Translating...';
|
76 |
|
77 |
try {
|
78 |
console.log('Sending translation request...');
|
79 |
|
80 |
+
// Create JSON payload from FormData
|
81 |
const payload = {
|
82 |
text: formData.get('text'),
|
83 |
source_lang: formData.get('source_lang'),
|
84 |
target_lang: formData.get('target_lang')
|
85 |
};
|
86 |
|
87 |
+
console.log('Payload:', payload);
|
88 |
+
|
89 |
const response = await fetch('/translate/text', {
|
90 |
method: 'POST',
|
91 |
headers: {
|
|
|
94 |
body: JSON.stringify(payload)
|
95 |
});
|
96 |
|
97 |
+
console.log('Response status:', response.status, response.statusText);
|
98 |
+
|
99 |
+
// Get response data as text first for debugging
|
100 |
+
const responseText = await response.text();
|
101 |
+
console.log('Raw response:', responseText);
|
102 |
+
|
103 |
+
// Try to parse as JSON
|
104 |
+
let data;
|
105 |
+
try {
|
106 |
+
data = responseText ? JSON.parse(responseText) : null;
|
107 |
+
} catch (parseError) {
|
108 |
+
console.error('Error parsing JSON response:', parseError);
|
109 |
+
throw new Error(`Failed to parse server response: ${responseText}`);
|
110 |
+
}
|
111 |
+
|
112 |
+
if (!data) {
|
113 |
+
throw new Error('Server returned empty response');
|
114 |
+
}
|
115 |
+
|
116 |
+
// Check if the response indicates an error
|
117 |
if (!response.ok) {
|
118 |
+
const errorMsg = data.error || data.detail || 'Unknown server error';
|
119 |
+
throw new Error(errorMsg);
|
|
|
|
|
|
|
|
|
|
|
|
|
120 |
}
|
121 |
+
|
122 |
+
// Check if we have actual translated text
|
123 |
+
if (data.success === false || !data.translated_text) {
|
124 |
+
throw new Error(data.error || 'No translation returned from server');
|
|
|
|
|
|
|
|
|
125 |
}
|
126 |
+
|
127 |
+
// Display the translation results
|
128 |
+
textOutput.textContent = data.translated_text;
|
129 |
textResultBox.style.display = 'block';
|
130 |
+
|
|
|
|
|
131 |
} catch (error) {
|
132 |
+
console.error('Translation error:', error);
|
133 |
+
displayError(error);
|
|
|
134 |
} finally {
|
135 |
button.disabled = false;
|
136 |
+
button.textContent = 'Translate';
|
137 |
}
|
138 |
});
|
139 |
|
|
|
162 |
body: formData // FormData handles multipart/form-data automatically
|
163 |
});
|
164 |
|
165 |
+
// Get response as text first for debugging
|
166 |
+
const responseText = await response.text();
|
167 |
+
console.log('Raw document response:', responseText);
|
168 |
+
|
169 |
+
// Try to parse as JSON
|
170 |
+
let result;
|
171 |
+
try {
|
172 |
+
result = JSON.parse(responseText);
|
173 |
+
} catch (jsonError) {
|
174 |
+
throw new Error(`Failed to parse server response: ${responseText}`);
|
175 |
}
|
176 |
|
177 |
+
if (!response.ok) {
|
178 |
+
const errorMessage = result.error || result.detail || `HTTP error! status: ${response.status}`;
|
179 |
+
throw new Error(errorMessage);
|
180 |
+
}
|
181 |
+
|
182 |
+
console.log('Document translation response:', result);
|
183 |
|
184 |
// Check if result contains the expected fields
|
185 |
if (!result.translated_text) {
|
|
|
190 |
docSourceLang.textContent = result.detected_source_lang || 'N/A';
|
191 |
docOutput.textContent = result.translated_text;
|
192 |
docResultBox.style.display = 'block';
|
193 |
+
|
194 |
+
// Set text direction based on target language (document always goes to Arabic)
|
195 |
+
docOutput.dir = 'rtl';
|
196 |
|
197 |
} catch (error) {
|
198 |
console.error('Document translation error:', error);
|
|
|
199 |
displayError(error.message || 'An unexpected error occurred during document translation.');
|
200 |
} finally {
|
201 |
button.disabled = false;
|