amine_dubs commited on
Commit
7f4d6ac
·
1 Parent(s): 7db04ce
Files changed (1) hide show
  1. 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
- // Better error object handling
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 instead of sending FormData directly
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 received:', response.status, response.statusText);
87
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  if (!response.ok) {
89
- let errorMessage;
90
- try {
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
- console.log('Processing response...');
100
- const result = await response.json();
101
- console.log('Parsed JSON result:', result);
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
- textOutput.textContent = result.translated_text;
 
109
  textResultBox.style.display = 'block';
110
- // Set text direction for Arabic
111
- textOutput.dir = 'rtl';
112
-
113
  } catch (error) {
114
- console.error('Text translation error:', error);
115
- // Always pass error.message instead of the error object
116
- displayError(error.message || 'An unexpected error occurred during text translation.');
117
  } finally {
118
  button.disabled = false;
119
- button.textContent = 'Translate Text';
120
  }
121
  });
122
 
@@ -145,13 +162,24 @@ document.addEventListener('DOMContentLoaded', () => {
145
  body: formData // FormData handles multipart/form-data automatically
146
  });
147
 
148
- if (!response.ok) {
149
- const errorData = await response.json();
150
- throw new Error(errorData.detail || `HTTP error! status: ${response.status}`);
 
 
 
 
 
 
 
151
  }
152
 
153
- const result = await response.json();
154
- console.log('Document translation response:', result); // Added debug logging
 
 
 
 
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;