Commit ·
b3b321f
1
Parent(s): 2653fef
fix: XSS escape error messages + 30s fetch timeout for dialect
Browse files- src/index.html +9 -3
src/index.html
CHANGED
|
@@ -1208,11 +1208,14 @@
|
|
| 1208 |
if (applyBtn) applyBtn.classList.add('is-hidden');
|
| 1209 |
if (convertBtn) { convertBtn.disabled = true; convertBtn.textContent = '⏳ جاري التحويل...'; }
|
| 1210 |
|
|
|
|
|
|
|
| 1211 |
try {
|
| 1212 |
var resp = await fetch('/api/dialect', {
|
| 1213 |
method: 'POST',
|
| 1214 |
headers: { 'Content-Type': 'application/json' },
|
| 1215 |
-
body: JSON.stringify({ text: input })
|
|
|
|
| 1216 |
});
|
| 1217 |
var data = await resp.json();
|
| 1218 |
if (data.status === 'success' && data.converted_text) {
|
|
@@ -1222,12 +1225,15 @@
|
|
| 1222 |
if (applyBtn) applyBtn.classList.remove('is-hidden');
|
| 1223 |
} else {
|
| 1224 |
_dialectResult = '';
|
| 1225 |
-
|
|
|
|
| 1226 |
}
|
| 1227 |
} catch (err) {
|
| 1228 |
_dialectResult = '';
|
| 1229 |
-
|
|
|
|
| 1230 |
} finally {
|
|
|
|
| 1231 |
if (convertBtn) { convertBtn.disabled = false; convertBtn.textContent = 'تحويل إلى الفصحى'; }
|
| 1232 |
}
|
| 1233 |
}
|
|
|
|
| 1208 |
if (applyBtn) applyBtn.classList.add('is-hidden');
|
| 1209 |
if (convertBtn) { convertBtn.disabled = true; convertBtn.textContent = '⏳ جاري التحويل...'; }
|
| 1210 |
|
| 1211 |
+
var _abortCtrl = new AbortController();
|
| 1212 |
+
var _timeout = setTimeout(function(){ _abortCtrl.abort(); }, 30000);
|
| 1213 |
try {
|
| 1214 |
var resp = await fetch('/api/dialect', {
|
| 1215 |
method: 'POST',
|
| 1216 |
headers: { 'Content-Type': 'application/json' },
|
| 1217 |
+
body: JSON.stringify({ text: input }),
|
| 1218 |
+
signal: _abortCtrl.signal
|
| 1219 |
});
|
| 1220 |
var data = await resp.json();
|
| 1221 |
if (data.status === 'success' && data.converted_text) {
|
|
|
|
| 1225 |
if (applyBtn) applyBtn.classList.remove('is-hidden');
|
| 1226 |
} else {
|
| 1227 |
_dialectResult = '';
|
| 1228 |
+
var errMsg = (data.error || 'حدث خطأ أثناء التحويل').replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
|
| 1229 |
+
resultDiv.innerHTML = '<p class="text-secondary text-center">' + errMsg + '</p>';
|
| 1230 |
}
|
| 1231 |
} catch (err) {
|
| 1232 |
_dialectResult = '';
|
| 1233 |
+
var msg = err.name === 'AbortError' ? 'انتهى وقت الانتظار — حاول مرة أخرى' : 'حدث خطأ — تأكد من الاتصال';
|
| 1234 |
+
resultDiv.innerHTML = '<p class="text-secondary text-center">' + msg + '</p>';
|
| 1235 |
} finally {
|
| 1236 |
+
clearTimeout(_timeout);
|
| 1237 |
if (convertBtn) { convertBtn.disabled = false; convertBtn.textContent = 'تحويل إلى الفصحى'; }
|
| 1238 |
}
|
| 1239 |
}
|