Skip to content

Commit 9514d1a

Browse files
Correct language selection
1 parent 4578859 commit 9514d1a

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

_plugins/snippet_tokens.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def render(content, site, locale)
2121

2222
snippet = File.read(resolved_path, encoding: "utf-8").rstrip
2323
escaped = escape_liquid(CGI.escapeHTML(snippet))
24-
"\n<pre><code class=\"language-python\">#{escaped}</code></pre>\n"
24+
"\n<pre data-lang=\"#{CGI.escapeHTML(locale.to_s)}\"><code class=\"language-python\">#{escaped}</code></pre>\n"
2525
end
2626
end
2727

assets/js/main.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
'use strict';
44

55
const baseUrl = (document.querySelector('meta[name="base-url"]') || {}).content || '';
6+
const pageLocale = (document.documentElement.lang || 'en').toLowerCase();
67

78

89
/* ================================================================
@@ -98,6 +99,14 @@
9899
return /^\s*(import\s+\w+|from\s+\w+\s+import\s+|#!\/usr\/bin\/env\s+python\d*(?:\.\d+)*)/m.test(src);
99100
}
100101

102+
function defaultExecutionLanguage() {
103+
return pageLocale === 'fr' ? 'fr' : 'en';
104+
}
105+
106+
function resolveExecutionLanguage(pre, code) {
107+
return pre.dataset.lang || code.dataset.lang || defaultExecutionLanguage();
108+
}
109+
101110
/* Render output (stdout + optional stderr) into a .code-output element. */
102111
function renderOutput(container, { stdout, stderr }) {
103112
container.innerHTML = '';
@@ -134,6 +143,11 @@
134143
const replToggle = document.getElementById('repl-toggle');
135144

136145
if (replPanel && replToggle) {
146+
const replLangSelect = document.getElementById('repl-lang');
147+
if (replLangSelect && [...replLangSelect.options].some(option => option.value === pageLocale)) {
148+
replLangSelect.value = pageLocale;
149+
}
150+
137151
/* Show panel on toggle click. */
138152
replToggle.addEventListener('click', () => {
139153
const open = !replPanel.hidden;
@@ -162,7 +176,7 @@
162176
/* Run button — compile and execute via Pyodide ProgramExecutor. */
163177
document.getElementById('repl-run-btn').addEventListener('click', async () => {
164178
const src = document.getElementById('repl-input').value.trim();
165-
const lang = document.getElementById('repl-lang').value;
179+
const lang = replLangSelect.value;
166180
const output = document.getElementById('repl-output');
167181
if (!src) return;
168182

@@ -204,7 +218,7 @@ _repl_errs = '\\n'.join(_r.errors) if _r.errors else ''
204218
}
205219

206220
const src = document.getElementById('repl-input').value.trim();
207-
const lang = document.getElementById('repl-lang').value;
221+
const lang = replLangSelect.value;
208222

209223
output.innerHTML = '<span class="repl-output-placeholder">Generating WAT…</span>';
210224
output.dataset.mode = 'wat';
@@ -281,7 +295,7 @@ except Exception as _e:
281295

282296
runBtn.addEventListener('click', async () => {
283297
const src = code.textContent.trim();
284-
const lang = pre.dataset.lang || 'en';
298+
const lang = resolveExecutionLanguage(pre, code);
285299
runBtn.textContent = '…';
286300
runBtn.disabled = true;
287301
outputPanel.hidden = false;
@@ -330,7 +344,7 @@ _block_errs = '\\n'.join(_r.errors) if _r.errors else ''
330344
outputPanel.innerHTML = '<span class="output-running">Generating WAT…</span>';
331345

332346
const src = code.textContent.trim();
333-
const lang = pre.dataset.lang || 'en';
347+
const lang = resolveExecutionLanguage(pre, code);
334348

335349
try {
336350
await ensureReplPyodide();

0 commit comments

Comments
 (0)