amine_dubs commited on
Commit
a92ab1c
·
1 Parent(s): 626d52e
Files changed (1) hide show
  1. static/script.js +85 -70
static/script.js CHANGED
@@ -44,86 +44,101 @@ window.onload = function() {
44
  if (errorElement) errorElement.style.display = 'none';
45
  if (debugElement) debugElement.style.display = 'none';
46
 
47
- // --- CRITICAL RE-FETCH AND CHECK ---
48
- // Re-fetch the element *right before* using it inside the handler
49
  const currentTextInput = document.getElementById('text-input');
50
- console.log('Re-fetched #text-input inside handler:', currentTextInput);
51
 
52
- // Check if it's null *immediately* before accessing .value
53
  if (!currentTextInput) {
54
- console.error('FATAL: document.getElementById(\'text-input\') returned null INSIDE the submit handler!');
55
- showError('Internal error: Text input element disappeared unexpectedly. Check console.');
56
- return; // Stop execution
57
- }
58
- // --- END CRITICAL CHECK ---
59
-
60
- // Get values
61
- // Use the locally fetched element reference
62
- const text = currentTextInput.value ? currentTextInput.value.trim() : '';
63
- if (!text) {
64
- showError('Please enter text to translate');
65
  return;
66
- }
67
-
68
- // Fetch other elements needed here (can also use stored references if they are reliable)
69
- const sourceLangValue = sourceLangText ? sourceLangText.value : null;
70
- const targetLangValue = targetLangText ? targetLangText.value : null;
71
-
72
- if (!sourceLangValue || !targetLangValue) {
73
- console.error('Source or Target language select element is null inside handler!');
74
- showError('Internal error: Language select element missing.');
75
- return;
76
- }
77
-
78
- // Show loading indicator
79
- if (textLoadingElement) textLoadingElement.style.display = 'block';
80
-
81
- // Create payload
82
- const payload = {
83
- text: text,
84
- source_lang: sourceLangValue,
85
- target_lang: targetLangValue
86
- };
87
-
88
- console.log('Sending payload:', payload);
89
-
90
- // Send API request
91
- fetch('/translate/text', {
92
- method: 'POST',
93
- headers: { 'Content-Type': 'application/json' },
94
- body: JSON.stringify(payload)
95
- })
96
- .then(response => {
97
- if (!response.ok) throw new Error('Server error: ' + response.status);
98
- return response.text(); // Get raw text first
99
- })
100
- .then(responseText => {
101
- console.log('Response received:', responseText);
102
- let data;
103
  try {
104
- data = JSON.parse(responseText);
105
- } catch (error) {
106
- console.error("Failed to parse JSON:", responseText);
107
- throw new Error('Invalid response format from server');
108
  }
109
 
110
- if (!data.success || !data.translated_text) {
111
- throw new Error(data.error || 'No translation returned or success flag false');
 
 
 
 
 
 
 
 
 
112
  }
 
113
 
114
- // Show result
115
- if (textResultBox && textOutputElement) {
116
- textOutputElement.textContent = data.translated_text;
117
- textResultBox.style.display = 'block';
118
  }
119
- })
120
- .catch(error => {
121
- showError(error.message || 'Translation failed');
122
- console.error('Error:', error);
123
- })
124
- .finally(() => {
125
- if (textLoadingElement) textLoadingElement.style.display = 'none';
126
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  });
128
 
129
  // Document translation handler
 
44
  if (errorElement) errorElement.style.display = 'none';
45
  if (debugElement) debugElement.style.display = 'none';
46
 
47
+ // --- ULTRA-DEFENSIVE CHECK ---
 
48
  const currentTextInput = document.getElementById('text-input');
49
+ console.log('[DEBUG] Element fetched inside handler:', currentTextInput);
50
 
 
51
  if (!currentTextInput) {
52
+ console.error('FATAL: getElementById(\'text-input\') returned null INSIDE handler.');
53
+ showError('Internal error: Text input element not found.');
 
 
 
 
 
 
 
 
 
54
  return;
55
+ } else {
56
+ console.log('[DEBUG] Element IS NOT NULL. Type:', typeof currentTextInput);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  try {
58
+ console.log('[DEBUG] Element outerHTML:', currentTextInput.outerHTML);
59
+ } catch (e) {
60
+ console.error('[DEBUG] Error accessing outerHTML:', e);
 
61
  }
62
 
63
+ // Now try accessing the value
64
+ let text = '';
65
+ try {
66
+ console.log('[DEBUG] Attempting to access .value...');
67
+ text = currentTextInput.value ? currentTextInput.value.trim() : '';
68
+ console.log('[DEBUG] Accessed .value successfully. Value:', text);
69
+ } catch (e) {
70
+ console.error('FATAL: Error occurred accessing .value:', e);
71
+ console.error('[DEBUG] Element state just before error:', currentTextInput);
72
+ showError('Internal error: Failed to read text input value. Check console.');
73
+ return; // Stop execution
74
  }
75
+ // --- END ULTRA-DEFENSIVE CHECK ---
76
 
77
+ if (!text) {
78
+ showError('Please enter text to translate');
79
+ return;
 
80
  }
81
+
82
+ // Fetch other elements needed here
83
+ const sourceLangValue = sourceLangText ? sourceLangText.value : null;
84
+ const targetLangValue = targetLangText ? targetLangText.value : null;
85
+
86
+ if (!sourceLangValue || !targetLangValue) {
87
+ console.error('Source or Target language select element is null inside handler!');
88
+ showError('Internal error: Language select element missing.');
89
+ return;
90
+ }
91
+
92
+ // Show loading indicator
93
+ if (textLoadingElement) textLoadingElement.style.display = 'block';
94
+
95
+ // Create payload
96
+ const payload = {
97
+ text: text,
98
+ source_lang: sourceLangValue,
99
+ target_lang: targetLangValue
100
+ };
101
+
102
+ console.log('Sending payload:', payload);
103
+
104
+ // Send API request
105
+ fetch('/translate/text', {
106
+ method: 'POST',
107
+ headers: { 'Content-Type': 'application/json' },
108
+ body: JSON.stringify(payload)
109
+ })
110
+ .then(response => {
111
+ if (!response.ok) throw new Error('Server error: ' + response.status);
112
+ return response.text(); // Get raw text first
113
+ })
114
+ .then(responseText => {
115
+ console.log('Response received:', responseText);
116
+ let data;
117
+ try {
118
+ data = JSON.parse(responseText);
119
+ } catch (error) {
120
+ console.error("Failed to parse JSON:", responseText);
121
+ throw new Error('Invalid response format from server');
122
+ }
123
+
124
+ if (!data.success || !data.translated_text) {
125
+ throw new Error(data.error || 'No translation returned or success flag false');
126
+ }
127
+
128
+ // Show result
129
+ if (textResultBox && textOutputElement) {
130
+ textOutputElement.textContent = data.translated_text;
131
+ textResultBox.style.display = 'block';
132
+ }
133
+ })
134
+ .catch(error => {
135
+ showError(error.message || 'Translation failed');
136
+ console.error('Error:', error);
137
+ })
138
+ .finally(() => {
139
+ if (textLoadingElement) textLoadingElement.style.display = 'none';
140
+ });
141
+ }
142
  });
143
 
144
  // Document translation handler