Commit 3100fa3178bf7cb48bb2b636dc72cad4c6014e73

Michael Schmidt 2019-03-11T00:21:16

More persistent test page (#1529) The test page will now remember the language and code last tested.

diff --git a/test.html b/test.html
index dbe992f..063a8ea 100644
--- a/test.html
+++ b/test.html
@@ -138,6 +138,28 @@ var form = $('form'), code = $('code', form),
     languages = components.languages,
     highlightCode = function() { Prism.highlightElement(code); };
 
+
+function updateHashLanguage(lang) {
+	location.hash = lang ? 'language=' + lang : '';
+}
+function getHashLanguage() {
+	var match = /[#&]language=([^&]+)/.exec(location.hash);
+	return match ? match[1] : null;
+}
+function getRadio(lang) {
+	return $('input[name=language][value="' + lang + '"]');
+}
+
+window.onhashchange = function () {
+	var input = getRadio(getHashLanguage());
+
+	if (input && !input.checked) {
+		input.checked = true;
+		input.onclick();
+	}
+}
+
+
 for (var id in languages) {
 	if (id == 'meta') {
 		continue;
@@ -160,6 +182,7 @@ for (var id in languages) {
 						var lang = this.value;
 						code.className = 'language-' + lang;
 						code.textContent = code.textContent;
+						updateHashLanguage(lang);
 
 						// loadLanguage() returns a promise, so we use highlightCode()
 						// as resolve callback. The promise will be immediately
@@ -228,15 +251,39 @@ function getDependenciesOfLanguage (lang)
 
 
 var radios = $$('input[name=language]');
-radios[0].checked = true;
-radios[0].onclick();
+var selectedRadio = radios[0];
+
+var lastLanguageRadio = getRadio(getHashLanguage());
+if (lastLanguageRadio) {
+	selectedRadio = lastLanguageRadio;
+}
+
+selectedRadio.checked = true;
+selectedRadio.onclick();
 
 var textarea = $('textarea', form);
 
-(textarea.oninput = function() {
-	code.textContent = this.value || '';
+try {
+	var lastCode = sessionStorage.getItem('test-code');
+	if (lastCode) {
+		textarea.value = lastCode;
+	}
+} catch (e) {
+	// ignore sessionStorage errors
+}
+
+textarea.oninput = function() {
+	var codeText = this.value || '';
+	code.textContent = codeText;
 	highlightCode();
-}).call(textarea);
+
+	try {
+		sessionStorage.setItem('test-code', codeText);
+	} catch (error) {
+		// ignore sessionStorage errors
+	}
+}
+textarea.oninput();
 
 $('#option-show-tokens').onchange = function () {
 	var cls = 'show-tokens';