@@ -3,8 +3,7 @@ $.ajaxSetup({cache: false, dataType: "text"});
3
3
$ ( document ) . on ( 'click' , 'a' , function ( e ) {
4
4
e . preventDefault ( ) ;
5
5
6
- var win = window . open ( $ ( this ) . attr ( 'href' ) , '_blank' ) ;
7
- if ( ! win ) {
6
+ if ( ! window . open ( $ ( this ) . attr ( 'href' ) , '_blank' ) ) {
8
7
alert ( 'Please allow popups for this site' ) ;
9
8
}
10
9
} ) ;
@@ -20,32 +19,47 @@ var initEditor = function (id) {
20
19
} ;
21
20
var dataEditor = initEditor ( 'data' ) ;
22
21
var codeEditor = initEditor ( 'code' ) ;
22
+ var lastDir = null ;
23
23
dataEditor . on ( 'change' , function ( ) {
24
+ var data = dataEditor . getValue ( ) ;
25
+ if ( lastDir ) cachedFile [ lastDir ] . data = data ;
24
26
try {
25
- eval ( dataEditor . getValue ( ) ) ;
27
+ eval ( data ) ;
26
28
lastModule = tracer && tracer . module ;
27
29
_tracer = tracer ;
28
30
} catch ( err ) {
29
31
}
30
32
_tracer . reset ( ) ;
31
33
} ) ;
34
+ codeEditor . on ( 'change' , function ( ) {
35
+ var code = codeEditor . getValue ( ) ;
36
+ if ( lastDir ) cachedFile [ lastDir ] . code = code ;
37
+ } ) ;
32
38
39
+ var cachedFile = { } ;
33
40
var loadFile = function ( category , algorithm , file , explanation ) {
34
41
lastData = null ;
35
42
$ ( '#explanation' ) . html ( explanation ) ;
36
- dataEditor . setValue ( '' ) ;
37
- codeEditor . setValue ( '' ) ;
38
43
39
- var dir = './algorithm/' + category + '/' + algorithm + '/' + file + '/' ;
40
- $ . get ( dir + 'data.js' , function ( data ) {
41
- dataEditor . setValue ( data , - 1 ) ;
44
+ var dir = lastDir = './algorithm/' + category + '/' + algorithm + '/' + file + '/' ;
45
+ if ( cachedFile [ dir ] && cachedFile [ dir ] . data !== undefined && cachedFile [ dir ] . code !== undefined ) {
46
+ dataEditor . setValue ( cachedFile [ dir ] . data , - 1 ) ;
47
+ codeEditor . setValue ( cachedFile [ dir ] . code , - 1 ) ;
48
+ } else {
49
+ dataEditor . setValue ( '' ) ;
50
+ codeEditor . setValue ( '' ) ;
51
+ $ . get ( dir + 'data.js' , function ( data ) {
52
+ cachedFile [ dir ] = { data : data } ;
53
+ dataEditor . setValue ( data , - 1 ) ;
42
54
43
- $ . get ( dir + 'code.js' , function ( data ) {
44
- codeEditor . setValue ( data , - 1 ) ;
55
+ $ . get ( dir + 'code.js' , function ( code ) {
56
+ cachedFile [ dir ] . code = code ;
57
+ codeEditor . setValue ( code , - 1 ) ;
58
+ } ) ;
59
+ } ) . fail ( function ( jqXHR , textStatus , errorThrown ) {
60
+ alert ( "AJAX call failed: " + textStatus + ", " + errorThrown ) ;
45
61
} ) ;
46
- } ) . fail ( function ( jqXHR , textStatus , errorThrown ) {
47
- alert ( "AJAX call failed: " + textStatus + ", " + errorThrown ) ;
48
- } ) ;
62
+ }
49
63
} ;
50
64
var loadAlgorithm = function ( category , algorithm ) {
51
65
$ ( '#list > button' ) . removeClass ( 'active' ) ;
@@ -57,6 +71,7 @@ var loadAlgorithm = function (category, algorithm) {
57
71
$ ( '#tab_desc > .wrapper' ) . empty ( ) ;
58
72
$ ( '.files_bar' ) . empty ( ) ;
59
73
$ ( '#explanation' ) . html ( '' ) ;
74
+ lastDir = null ;
60
75
dataEditor . setValue ( '' ) ;
61
76
codeEditor . setValue ( '' ) ;
62
77
0 commit comments