@@ -17,6 +17,7 @@ var $markedVer = document.querySelector('#markedCdn');
1717var $optionsElem = document . querySelector ( '#options' ) ;
1818var $outputTypeElem = document . querySelector ( '#outputType' ) ;
1919var $inputTypeElem = document . querySelector ( '#inputType' ) ;
20+ var $responseTimeElem = document . querySelector ( '#responseTime' ) ;
2021var $previewElem = document . querySelector ( '#preview' ) ;
2122var $previewIframe = document . querySelector ( '#preview iframe' ) ;
2223var $permalinkElem = document . querySelector ( '#permalink' ) ;
@@ -298,6 +299,7 @@ function checkForChanges() {
298299 setScrollPercent ( scrollPercent ) ;
299300 var endTime = new Date ( ) ;
300301 delayTime = endTime - startTime ;
302+ setResponseTime ( delayTime ) ;
301303 if ( delayTime < 50 ) {
302304 delayTime = 50 ;
303305 } else if ( delayTime > 500 ) {
@@ -309,6 +311,22 @@ function checkForChanges() {
309311 checkChangeTimeout = window . setTimeout ( checkForChanges , delayTime ) ;
310312} ;
311313
314+ function setResponseTime ( ms ) {
315+ var amount = ms ;
316+ var suffix = 'ms' ;
317+ if ( ms > 1000 * 60 * 60 ) {
318+ amount = 'Too Long' ;
319+ suffix = '' ;
320+ } else if ( ms > 1000 * 60 ) {
321+ amount = '>' + Math . floor ( ms / ( 1000 * 60 ) ) ;
322+ suffix = 'm' ;
323+ } else if ( ms > 1000 ) {
324+ amount = '>' + Math . floor ( ms / 1000 ) ;
325+ suffix = 's' ;
326+ }
327+ $responseTimeElem . textContent = amount + suffix ;
328+ }
329+
312330function setParsed ( parsed , lexed ) {
313331 if ( iframeLoaded ) {
314332 $previewIframe . contentDocument . body . innerHTML = parsed ;
@@ -339,6 +357,7 @@ function messageWorker(message) {
339357 var scrollPercent = getScrollPercent ( ) ;
340358 setParsed ( e . data . parsed , e . data . lexed ) ;
341359 setScrollPercent ( scrollPercent ) ;
360+ setResponseTime ( e . data . time ) ;
342361 break ;
343362 }
344363 clearTimeout ( checkChangeTimeout ) ;
@@ -363,10 +382,16 @@ function messageWorker(message) {
363382 } ;
364383 }
365384 markedWorker . working = true ;
385+ workerTimeout ( 0 ) ;
386+ markedWorker . postMessage ( message ) ;
387+ }
388+
389+ function workerTimeout ( seconds ) {
366390 markedWorker . timeout = setTimeout ( function ( ) {
367- markedWorker . onerror ( 'Marked is taking a while...' ) ;
391+ seconds ++ ;
392+ markedWorker . onerror ( 'Marked has taken longer than ' + seconds + ' second' + ( seconds > 1 ? 's' : '' ) + ' to respond...' ) ;
393+ workerTimeout ( seconds ) ;
368394 } , 1000 ) ;
369- markedWorker . postMessage ( message ) ;
370395}
371396checkForChanges ( ) ;
372397setScrollPercent ( 0 ) ;
0 commit comments