@@ -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 = / [ # & ] l a n g u a g e = ( [ ^ & ] + ) / . 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+
141163for ( 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
230253var 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
234264var 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