Skip to content

Commit 3100fa3

Browse files
More persistent test page (#1529)
The test page will now remember the language and code last tested.
1 parent bc53e09 commit 3100fa3

File tree

1 file changed

+52
-5
lines changed

1 file changed

+52
-5
lines changed

test.html

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,28 @@ <h2>Test drive</h2>
138138
languages = components.languages,
139139
highlightCode = function() { Prism.highlightElement(code); };
140140

141+
142+
function updateHashLanguage(lang) {
143+
location.hash = lang ? 'language=' + lang : '';
144+
}
145+
function getHashLanguage() {
146+
var match = /[#&]language=([^&]+)/.exec(location.hash);
147+
return match ? match[1] : null;
148+
}
149+
function getRadio(lang) {
150+
return $('input[name=language][value="' + lang + '"]');
151+
}
152+
153+
window.onhashchange = function () {
154+
var input = getRadio(getHashLanguage());
155+
156+
if (input && !input.checked) {
157+
input.checked = true;
158+
input.onclick();
159+
}
160+
}
161+
162+
141163
for (var id in languages) {
142164
if (id == 'meta') {
143165
continue;
@@ -160,6 +182,7 @@ <h2>Test drive</h2>
160182
var lang = this.value;
161183
code.className = 'language-' + lang;
162184
code.textContent = code.textContent;
185+
updateHashLanguage(lang);
163186

164187
// loadLanguage() returns a promise, so we use highlightCode()
165188
// as resolve callback. The promise will be immediately
@@ -228,15 +251,39 @@ <h2>Test drive</h2>
228251

229252

230253
var radios = $$('input[name=language]');
231-
radios[0].checked = true;
232-
radios[0].onclick();
254+
var selectedRadio = radios[0];
255+
256+
var lastLanguageRadio = getRadio(getHashLanguage());
257+
if (lastLanguageRadio) {
258+
selectedRadio = lastLanguageRadio;
259+
}
260+
261+
selectedRadio.checked = true;
262+
selectedRadio.onclick();
233263

234264
var textarea = $('textarea', form);
235265

236-
(textarea.oninput = function() {
237-
code.textContent = this.value || '';
266+
try {
267+
var lastCode = sessionStorage.getItem('test-code');
268+
if (lastCode) {
269+
textarea.value = lastCode;
270+
}
271+
} catch (e) {
272+
// ignore sessionStorage errors
273+
}
274+
275+
textarea.oninput = function() {
276+
var codeText = this.value || '';
277+
code.textContent = codeText;
238278
highlightCode();
239-
}).call(textarea);
279+
280+
try {
281+
sessionStorage.setItem('test-code', codeText);
282+
} catch (error) {
283+
// ignore sessionStorage errors
284+
}
285+
}
286+
textarea.oninput();
240287

241288
$('#option-show-tokens').onchange = function () {
242289
var cls = 'show-tokens';

0 commit comments

Comments
 (0)