Spaces:
Running
Running
File size: 3,278 Bytes
d45a73e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
const input = document.getElementById('input');
const transformed = document.getElementById('transformed');
const preview = document.getElementById('preview');
input.addEventListener('input', update);
function renderPreview(raw) {
// 1. Markdown Parse (Pehle markdown convert karein)
let html = marked.parse(raw);
// 2. Render Display Math ($$ .. $$)
// Yeh logic sirf tabhi replace karega jab closing $$ mil jaaye
html = html.replace(/\$\$([\s\S]+?)\$\$/g, (match, expr) => {
try {
// KaTeX render check
return katex.renderToString(expr.trim(), {
displayMode: true,
throwOnError: true // Galti hone par catch block mein bhej dega
});
} catch (e) {
return match; // Agar invalid LaTeX hai toh original text ($$..) hi rehne do
}
});
// 3. Render Inline Math ($ .. $)
// Negative lookbehind use kiya hai taaki $$ ko target na kare
html = html.replace(/(?<!\$)\$([^\$\n]+?)\$(?!\$)/g, (match, expr) => {
try {
return katex.renderToString(expr.trim(), {
displayMode: false,
throwOnError: true
});
} catch (e) {
return match; // Invalid hone par render mat karo, as-is rehne do
}
});
preview.innerHTML = html;
}
function update() {
const val = input.value;
// Transformed View Logic (Sirf valid pairs ko replace karega)
let transformedText = val;
let displayCount = 0;
// Display Math replace for Transformed View
transformedText = transformedText.replace(/\$\$([\s\S]+?)\$\$/g, (match, expr) => {
return "{% katex %}" + expr.trim() + "{% endkatex %}";
});
// Inline Math replace for Transformed View
transformedText = transformedText.replace(/(?<!\$)\$([^\$\n]+?)\$(?!\$)/g, (match, expr) => {
return "{% katex inline %}" + expr.trim() + "{% endkatex %}";
});
transformed.innerText = transformedText;
renderPreview(val);
}
function copyTransformed() {
const textToCopy = transformed.innerText; // Sirf transformed content lega
if (!textToCopy) return;
navigator.clipboard.writeText(textToCopy).then(() => {
const btn = document.getElementById('copyBtn');
btn.innerHTML = "✅ Copied!";
btn.style.background = "var(--success)";
setTimeout(() => {
btn.innerHTML = "📋 Copy Result";
btn.style.background = "var(--accent)";
}, 2000);
});
}
function showTab(idx) {
document.querySelectorAll('.panel').forEach((p, i) => {
p.classList.toggle('active', i === idx);
if (window.innerWidth > 850) p.style.display = "flex"; // Reset for desktop
});
document.querySelectorAll('.tab').forEach((t, i) => t.classList.toggle('active', i === idx));
}
function loadFile(e) {
const file = e.target.files[0];
const reader = new FileReader();
reader.onload = (ev) => { input.value = ev.target.result; update(); };
reader.readAsText(file);
}
// Default content
input.value = "# Hello LaTeX\nWrite math between double dollar signs:\n\n$$ e^{i\\pi} + 1 = 0 $$";
update(); |